【发布时间】:2018-01-22 23:24:43
【问题描述】:
我在将某些代码转换为异步或并行工作时遇到问题。我遇到了一个异步链(async/await 在调用堆栈上行进),这导致我的 API 需要将任务返回到另一个 .NET 4.0 应用程序。
.NET 4.0 无法实现等待,因此它在 API 端强制执行 task.Result,这否定了性能改进。
在我的 API 中,我有一些对另一个 API 的调用(发送通知),我不希望在将控制权返回给我的 API 调用者之前等待(当第 3 方 api 挂起时性能缓慢)。我确实关心调用 3rd 方 API 以进行日志记录的结果。
使用 Task.Run 以并行方式运行这些调用显示了 UI 响应能力的巨大差异,但我担心这将创建的线程数量以及在这种情况下可能导致我的整个池死锁的超时问题。
如何在 C# .NET 4.5 中正确处理这种情况?
我可以将所有 3rd 方 API 调用从单个上下文发送到线程进行处理,而不是在每个上下文上调用 task.run 吗?
【问题讨论】:
-
仅供参考,.NET 4.0 可以执行异步/等待。您只需要包含Microsoft.Bcl.Async NuGet 包。
-
谢谢斯科特。 Visual Studios 2010(我正在使用)不支持它,但很高兴知道。
-
Visual Studio 2017 Community Edition 完全免费供个人使用,您可能需要考虑更新。
标签: c# .net multithreading asynchronous parallel-processing