static async Task WaitTaskCompleted()
{
    //Use Thread A before await Task.CompletedTask
    await Task.CompletedTask;
    //Will the code after await Task.CompletedTask always use Thread A, or there is chance to have a Thread B?
}

这意味着await Task.CompletedTask将始终实际同步执行该方法?

最佳答案

是的,此代码将始终同步运行;主要延续编译器goo仅在遇到第一个不完整的等待对象时被调用。

您可以在sharplab中看到它-特别是在这里:

awaiter = Task.CompletedTask.GetAwaiter();
if (!awaiter.IsCompleted)
{
    num = (<>1__state = 0);
    <>u__1 = awaiter;
    <>t__builder.AwaitUnsafeOnCompleted(ref awaiter, ref this);
    return;
}

实现异步性的是AwaitUnsafeOnCompleted(...) + return

关于c# - 等待Task.CompletedTask是否意味着async方法将同步运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59769625/

10-10 13:10