【问题标题】:Await and async behavior等待和异步行为
【发布时间】:2015-12-16 16:03:21
【问题描述】:

举个例子:

void Main() { Test().Wait(); }

async Task Test()
{
    Console.WriteLine("Test A");
    await AsyncFunction();
    // It doesn't matter where the await is in AsyncFunction, it will always wait for the function to complete before executing the next line.
    Console.WriteLine("Test B");
}

async Task AsyncFunction()
{
    Console.WriteLine("AsyncFunction A");
    await Task.Yield();
    Console.WriteLine("AsyncFunction B");
}

在任何情况下都不会在“AsyncFunction B”之前显示“Test B”

Test() 中的 await 语句不只是等待 Task.Yield() 完成恢复,而是等待整个 AsyncFunction 完成?

【问题讨论】:

    标签: c# .net asynchronous async-await task-parallel-library


    【解决方案1】:

    在任何情况下都不会在“AsyncFunction B”之前显示“Test B”?

    不,这不会发生。

    Test() 中的 await 语句不只是等待 Task.Yield() 完成恢复,而是等待整个 AsyncFunction 完成?

    没错。由于您正在等待AsyncFunction,因此一旦方法完成执行,控制就会恢复。如果你没有等待它,那么一旦从await Task.Yield返回控制权就会执行下一行

    【讨论】:

    • @Nathan 并不多。但更多的是herehere。它基本上所做的只是将延续发布到当前同步上下文中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2018-11-29
    相关资源
    最近更新 更多