.net - 关于等待任务异步的非常简单的问题
问题描述
在阅读和观看视频数小时后,我似乎无法弄清楚一件简单的事情。
这两者之间有区别还是编译器会为我这样做?每次等待时我真的需要做 Task.Run 吗?
Task.Run(async () =>
{
await _databaseConnectionHelper.SetDatabaseConnectionFromOrganization(orgId);
}).Wait();
和
await _databaseConnectionHelper.SetDatabaseConnectionFromOrganization(orgId);
另外,我看到有些人说要始终使用 ConfigureAwait(false),有些人说不要。我似乎无法得到一个直接的答案。
感谢您帮助新手。我真的很想找到这个,并且在过去的几天里花了几个小时研究等待/异步。我比以前更了解它,但是一些基础知识却让我无法理解。
顺便说一句,这是在 .NET Core 3.1 项目中,如果这有所作为的话。我的应用程序基本上是访问数据库并将它们显示在网站上的 CRUD。
解决方案
这两者之间有区别还是编译器会为我这样做?
就在这里。第一个将阻塞当前线程直到Task.Run
完成,如果您的调用是异步的,第二个将允许重用当前线程。因此,在某些情况下,与第二个相比,第一个可能会导致明显的性能下降。
每次等待时我真的需要做 Task.Run 吗?
不,你没有,我想说你应该(几乎)永远不要在现代代码库中做这样的事情。
我看到有些人说要一直使用
ConfigureAwait(false)
,有些人说不要
当您编写一些任何人都可以使用的库(UI 应用程序,或旧版 ASP.NET 应用程序,或任何其他可能存在上下文的地方)时,这是一般的经验法则。但在你的情况下,如果你有“vanilla” ASP.Net Core 3.1 webapp,你就不需要(参见已经链接的帖子)。
此外,如果您想更深入地了解ConfigureAwait
Stephen Cleary 的这篇文章和Stephen Toub 的这篇文章。
推荐阅读
- swift - 'CaseIterable' 协议的 allCases 和 AllCases 有什么区别?
- oauth-2.0 - 视图函数未返回有效响应。返回类型必须是字符串,dict
- powerbi - 如何合并2个堆积柱形图?
- python - 无法在 python 3.9 中使用 pip 安装 pylint
- javascript - Javascript 检查数组是否为空或未定义
- python - 浮点数显示为浮点数,但整数在python中显示为整数
- algorithm - 三栈实现k栈
- javascript - 溢出自动(可滚动)内容的锚点
- exchange-server - 比特币如何通过 RPC 创建新账户
- asp.net-core - 如何在 ViewComponent 中重用联系表单?