首页 > 后端开发 > C++ > 在多线程应用程序中,什么线程在'await”关键字之后执行代码?

在多线程应用程序中,什么线程在'await”关键字之后执行代码?

Linda Hamilton
发布: 2024-12-30 22:48:10
原创
770 人浏览过

What Thread Executes Code After an `await` Keyword in a Multi-Threaded Application?

揭开“Await”后线程执行的神秘面纱

在多线程应用程序中,理解执行流程至关重要。当遇到神秘的“await”关键字时,开发人员经常会遇到这样的问题:“哪个线程在“await”之后协调代码的恢复?”

考虑以下代码片段:

private void MyMethod()
{
    Task task = MyAsyncMethod();
    task.Wait();
}

private async Task MyAsyncMethod()
{
    //Code before await
    await MyOtherAsyncMethod();
    //Code after await
}
登录后复制

假设这段代码在单线程应用程序中运行,它会变得令人困惑:如果线程是,'await'关键字后面的代码如何执行被“task.Wait()”锁定?

答案在于“await”关键字的复杂行为。它将控制权交还给调用者,允许其他异步操作继续进行。 “等待”任务的延续(“等待”之后的代码)被安排在符合当前同步上下文的线程上执行。

在这种情况下,如果“MyMethod()”函数在 UI 线程上执行,“await”之后的代码也将在 UI 线程上执行一次“MyOtherAsyncMethod()”完成。

但是,需要注意的是,不能保证用于延续的确切线程。在多线程应用程序中,延续可以在线程池中的任何可用线程上执行。但是,同步上下文确保“await”之后的代码以与原始线程一致的方式执行。

在给定的示例中,通过调用“task.Wait()”,主线程线程将无限期地被阻塞,从而阻止继续执行。为了避免这种情况,应该正确等待异步操作而不阻塞主线程。

以上是在多线程应用程序中,什么线程在'await”关键字之后执行代码?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板