diff --git a/mindspore/ccsrc/backend/session/executor.cc b/mindspore/ccsrc/backend/session/executor.cc
index f4f147f142..bcddb8b122 100644
--- a/mindspore/ccsrc/backend/session/executor.cc
+++ b/mindspore/ccsrc/backend/session/executor.cc
@@ -220,6 +220,7 @@ bool Executor::IsTaskReady(const std::shared_ptr<RunGraphTask> &task) {
 void Executor::SyncRunTask(const std::shared_ptr<Task> &task) {
   std::unique_lock<std::mutex> lock(task_mutex_);
   ready_tasks_.push(task);
+  done_tasks_.clear();
   task_cond_var_.notify_all();
   sync_cond_var_.wait(lock);
   MsException::GetInstance().CheckException();
@@ -328,6 +329,11 @@ void Executor::RunOp(const SessionPtr &session, OpRunInfo *op_run_info, const Gr
   task->op_run_info_ = op_run_info;
   task->graph_info_ = graph_info;
   task->input_tensors_ = input_tensors;
+  for (auto &tensor : input_tensors) {
+    if (tensor->NeedWait()) {
+      tensor->Wait();
+    }
+  }
   SyncRunTask(task);
   *outputs = task->outputs_;
 }