c# - 当所有异步调用完成时,finally 会阻塞执行

标签 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;
}

最佳答案

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/

相关文章:

c# - javascript 函数没有被调用

C# 应用程序创建许多连接线程,MySQL

angular - 如何在不将所有代码更改为 Promise 的情况下等待 rxjs Observable

c# - 如何使用 polly 启用超时策略

java - 如何在 Java 中实现异步方法调用?

javascript - 如何在函数内等待事件监听器?

c# - 什么 API 可用于读取 OAB 文件?

c# - 设置不在线(IPEnabled 不正确)/电缆未连接的网络接口(interface)的 IP 地址?

javascript - 如何阻止事件循环直到完成运行异步任务

javascript - 在 firefox 和 ie 中防止 fouc