当所有异步调用完成时,执行最后一个块



我希望抓住这种情况,我有一个父方法- EventMethod,它内部调用另一个方法- Handler1()。Handler1()在内部调用异步方法,这些方法在内部调用一些其他异步方法。链条继续有点长。

我怎么能执行我的finally语句只有当所有的异步调用完成?在下面的代码中,一旦在调用Handler1()方法

中命中await,就立即调用finally。
void EventMethod()
{
try { 
 Helper.Handler1();
 } catch(Exception ex){}
finally{
  GlobalVariable.ExecutionCompleted = true;
}
async void EventMethod()
{
  try 
  { 
    await Helper.Handler1(); //Make sure this return Task
  }
  catch(Exception ex)
  {
  }
  finally
  {
    GlobalVariable.ExecutionCompleted = true;
  }
}

嘲弄你的助手

    private static Task Handler1()
    {
        var t1 = DoSomething2();
        var t2 = DoSomething3();
        return Task.WhenAll(t1, t2); //You could return the task or await here itself 
    }
    private static Task DoSomething2()
    {
        Console.WriteLine("DoSomethign 2");
        return Task.Delay(3000);
    }
    private static Task DoSomething3()
    {
        Console.WriteLine("DoSomethign 3");
        return Task.Delay(3000);
    }

您可以获得工作示例dotnetfiddle。我已经试着重复我对你问题的理解。例如,您可以找到两个可以并行执行的任务

处理程序方法返回为Task。你可以调用Wait()

相关内容

  • 没有找到相关文章

最新更新