等待异步方法中的任务

时间:2020-06-16 04:12:49

标签: c# asynchronous async-await

我正在使用异步等待方法,但无法获得下一个功能:

我有一个同步包装方法(MethodSync),该方法调用异步方法(MethodA_Async),然后做一些事情(MethodB)。

此后,它进入一个循环,在该循环中,每个项目都会做一些事情(MethodC),然后运行一个异步方法(MethodE_Async),但要等待MethodA_Async完成(这就是为什么我传递MethodA_Async返回的任务:等待它完成的原因)。

最后,它执行其他操作(MethodD),并等待所有MethodE_Async完成。

问题在于它无法正常工作,并进入了无限的等待循环。

private async Task<bool> MethodA_Async()
{
   bool finish = false;
   await Task.Run(()=>
   {
       // Doing another things
       finish = true;
   });
   return finish;
}
private void MethodB() { }

private void MethodC() { }

private void MethodD() { }

private async Task MethodE_Async (Task<bool> methodATask, int item)
{
   await Task.Run(async() =>
   {
      // Waits for MethodA_Async to finish
      bool finish = await methodATask;

      // Other logic that works on item parameter.
      var result = 2*item;

   });
}

public bool MethodSync()
{
   // Starts MethodA_Async
   var taskMethodA = MethodA_Async();

   // Doing other things that do not depend upon MethodA_Async
   MethodB();

   // Iterations
   var tasksDependingOnMethodA = new List<Task>();
   var items = new List<int>{ 1, 2, 3 };
   foreach(var item in items)
   {
      // Doing other things that do not depend upon MethodA_Async
      MethodC();

      // MethodE_Async starts
      tasksDependingOnMethodA.Add(MethodE_Async(taskMethodA, item));
   }

   // Other method that does not depend upon MethodA_Async
   MethodD();

   // Wait for all MethodE_Async methods to finish
   Task.WhenAll(tasksDependingOnMethodA).GetAwaiter().GetResult();

   return true;
}

如果您能给我任何指导,我将不胜感激。

0 个答案:

没有答案
相关问题