在异步方法 .net 4.5 中管理同步调用

本文关键字:管理 同步 调用 异步方法 net | 更新日期: 2023-09-27 17:57:19

我有一个关于异步方法内部同步调用的问题。

我在一个异步方法中有 5 个 I/O 调用。 其中 3 个具有我可以使用的异步 API,但其中 2 个是同步的(请求没有异步 API 的 Web 服务)。我的问题是这种情况的最佳实践是什么?

  1. 我可以将同步调用包装在Task.RunTask.Factory.StartNew并从池中获取线程,但在视频中您提到它实际上可能会损害并发性。
  2. 我可以保持同步调用不变,但 TAP 建议 TAP 方法完成的同步工作应尽可能少,并避免在异步方法内进行同步长时间运行的操作。

我有点困惑正确的方式是什么。

在异步方法 .net 4.5 中管理同步调用

您可以将 StartNew 与自定义 SynchonizationContext 结合使用,也可以将任务设置为 LongRunning。长时间运行的任务使用自己的线程。它会以某种方式损害性能(整体系统上运行的线程更多),但不会对 ThreadPool 上运行的其他内容产生影响。

Task.Factory.StartNew(() => DoThingy(), TaskCreationOptions.LongRunning)

您可以在此处查看有关任务计划程序 http://msdn.microsoft.com/en-us/library/dd997402.aspx 的信息。