最后阻止在所有异步调用完成后执行

时间:2016-08-09 04:46:13

标签: c# asynchronous async-await task try-catch-finally

我希望得到这种情况,我有一个父方法 - EventMethod,它在内部调用另一个方法 - Handler1()。 Handler1()内部调用异步方法,内部调用其他异步方法。链条持续了一段时间。

如果所有异步调用都被匹配,我怎样才能执行我的finally语句? 在下面的代码中,一旦在调用Handler1()方法

中命中了await,就会立即调用finally
void EventMethod()
{
try { 
 Helper.Handler1();
 } catch(Exception ex){}
finally{
  GlobalVariable.ExecutionCompleted = true;
}

2 个答案:

答案 0 :(得分:2)

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。我试图重现我对你的问题的理解。在示例中,您可以找到可以并行执行的两个任务

答案 1 :(得分:0)

您的处理程序方法返回Task。您可以在其上拨打Wait()。请参阅MSDN中的Task