考虑以下代码示例:
private void MyMethod() { Task task = MyAsyncMethod(); task.Wait(); } private async Task MyAsyncMethod() { //Code before await await MyOtherAsyncMethod(); //Code after await }
在此示例中,当使用await关键字时在 MyAsyncMethod() 中遇到,控制返回到 MyMethod()。然而,由于task.Wait(),线程没有被锁定。相反,延续(await 之后的代码)在不同的线程上执行。
await 运算符利用同步上下文,它确定应如何执行延续。默认情况下,如果调用者在 UI 线程上运行,则 continuación 也会在 UI 线程上执行。这允许与 UI 操作无缝集成。
但是,如果调用者在线程池线程上运行,则延续可能会在不同的线程池线程上执行。这是因为线程池线程并非专用于特定任务,而是可以同时用于多个操作。
需要注意的是,可以使用ConfigureAwait 方法修改await 运算符的行为。此方法允许您指定延续是否应在同一线程或不同线程上运行。
例如,如果您不希望延续在同一线程上运行,而是在线程池线程上运行:
await task.ConfigureAwait(false);
通过了解同步上下文的工作原理,您可以有效管理异步代码中的线程执行并防止潜在的锁定问题。
以上是C# 中的'await”关键字后线程执行会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!