我希望掌握这种情况,我有一个父方法 - 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;
}
}
mock 你的 helper
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 。我试图重现我对你的问题的理解。在示例中,您可以找到两个可以并行执行的任务
关于c# - 当所有异步调用完成时,finally 会阻塞执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842271/