我在GitHub上偶然发现了一个问题(https://github.com/HTBox/allReady/issues/1313),在那里他们讨论了如何ConfigureAwait(false)在ASP.NET核心中删除代码
呼叫
ConfigureAwait(false)是多余的,什么都不做
我能找到的最好的答案是一个"旁注"(来自Stephen Cleary,https: //stackoverflow.com/a/40220190/2805831 )
ASP.NET Core不再具有"上下文"
那么,ASP.NET Core中ConfigureAwait(false)真的没必要(即使使用完整的.Net Framework)?在某些情况下,它在性能方面是否有任何实际的好处,或者在结果/语义上有所不同?
编辑:如果我将其作为控制台应用程序托管或在IIS中,它在这方面有所不同吗?
让我发一个简单的例子:
private void MyMethod()
{
Task task = MyAsyncMethod();
task.Wait();
}
private async Task MyAsyncMethod()
{
//Code before await
await MyOtherAsyncMethod();
//Code after await
}
Run Code Online (Sandbox Code Playgroud)
假设我在一个单线程应用程序中运行上面的代码 - 就像一个控制台应用程序 - .我很难理解代码//Code after await是如何运行的.
我明白当我await在MyAsyncMethod()控制中点击关键字时会回到原点MyMethod(),但后来我将锁定该线程task.Wait().如果线程被锁定,//Code after await如果应该接受它的线程被锁定,怎么能运行?
是否创建了一个新线程来运行//Code after await?或者主线程神奇地走出task.Wait()去运行//Code after await?
我不确定这是怎么回事?