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

时间:2014-04-08 16:22:20

标签: c# multithreading asynchronous .net-4.5 async-await

我对异步方法中的同步调用有疑问。

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

  1. 我可以在Task.RunTask.Factory.StartNew中包装同步调用并从池中获取线程,但在您提到的视频中,它实际上可能会损害并发性。
  2. 我可以按原样保留同步调用,但TAP建议TAP方法完成的同步工作应尽可能少,并避免在异步方法中同步长时间运行。
  3. 我对这里的正确方法感到有点困惑。

1 个答案:

答案 0 :(得分:1)

您可以将StartNew与自定义SynchonizationContext一起使用,也可以将Task设置为LongRunning。 LongRunning任务使用自己的线程。它会对性能造成影响(整个系统上运行的线程越多),但不会对ThreadPool上运行的其他东西产生影响。

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

您可以在此处查看TaskSchedulers http://msdn.microsoft.com/en-us/library/dd997402.aspx