关于等待任务异步的非常简单的问题
Very simple question about awaiting a task async
阅读和观看视频数小时后,我似乎无法弄清楚一件简单的事情。
这两者之间有区别还是编译器为我做了这个?每次等待时我真的需要做 Task.Run 吗?
Task.Run(async () =>
{
await _databaseConnectionHelper.SetDatabaseConnectionFromOrganization(orgId);
}).Wait();
和
await _databaseConnectionHelper.SetDatabaseConnectionFromOrganization(orgId);
此外,我看到有些人说总是使用 ConfigureAwait(false) 而有些人说不要。我似乎得不到直接的答案。
感谢您帮助新手。我真的很想找到这个,并且在过去的几天里花了几个小时研究 await/async。我对它的理解比以前好多了,但是一些基础知识让我无法理解。
顺便说一句,如果有区别的话,这是在 .NET Core 3.1 项目中。我的应用程序基本上是访问数据库并将它们显示在网站上的 CRUD。
Is there a difference between these two or does the compiler do this for me?
是的,有。第一个将阻塞当前线程,直到 Task.Run
完成,第二个将允许在您的调用是异步的情况下重用当前线程。因此,在某些情况下,与第二个相比,第一个可能会导致明显的性能下降。
Do I actually need to do Task.Run every time I await?
不,你不需要,我会说你应该(几乎)永远不要在现代代码库中做这样的事情。
I see some people say to always use ConfigureAwait(false)
and some say not to
它是 a general rule of thumb,当你正在编写一些可供任何人使用的库(UI 应用程序,或遗留 ASP.NET 应用程序,或任何其他可能有上下文的地方) .但是在你的情况下,如果你有“vanilla”ASP.Net Core 3.1 webapp,你就不需要了(参见已经链接的 post)。
此外,如果您想更深入地了解 ConfigureAwait
,请参阅 this post by Stephen Cleary and this one by Stephen Toub。
阅读和观看视频数小时后,我似乎无法弄清楚一件简单的事情。
这两者之间有区别还是编译器为我做了这个?每次等待时我真的需要做 Task.Run 吗?
Task.Run(async () =>
{
await _databaseConnectionHelper.SetDatabaseConnectionFromOrganization(orgId);
}).Wait();
和
await _databaseConnectionHelper.SetDatabaseConnectionFromOrganization(orgId);
此外,我看到有些人说总是使用 ConfigureAwait(false) 而有些人说不要。我似乎得不到直接的答案。
感谢您帮助新手。我真的很想找到这个,并且在过去的几天里花了几个小时研究 await/async。我对它的理解比以前好多了,但是一些基础知识让我无法理解。
顺便说一句,如果有区别的话,这是在 .NET Core 3.1 项目中。我的应用程序基本上是访问数据库并将它们显示在网站上的 CRUD。
Is there a difference between these two or does the compiler do this for me?
是的,有。第一个将阻塞当前线程,直到 Task.Run
完成,第二个将允许在您的调用是异步的情况下重用当前线程。因此,在某些情况下,与第二个相比,第一个可能会导致明显的性能下降。
Do I actually need to do Task.Run every time I await?
不,你不需要,我会说你应该(几乎)永远不要在现代代码库中做这样的事情。
I see some people say to always use
ConfigureAwait(false)
and some say not to
它是 a general rule of thumb,当你正在编写一些可供任何人使用的库(UI 应用程序,或遗留 ASP.NET 应用程序,或任何其他可能有上下文的地方) .但是在你的情况下,如果你有“vanilla”ASP.Net Core 3.1 webapp,你就不需要了(参见已经链接的 post)。
此外,如果您想更深入地了解 ConfigureAwait
,请参阅 this post by Stephen Cleary and this one by Stephen Toub。