我对异步方法中的同步调用有疑问。
我在一个异步方法中有5个I / O调用。其中3个具有我可以使用的异步api,但其中2个是同步的(没有异步api的Web服务请求)。我的问题是这种情况的最佳做法是什么?
Task.Run
或Task.Factory.StartNew
中包装同步调用并从池中获取线程,但在您提到的视频中,它实际上可能会损害并发性。我对这里的正确方法感到有点困惑。
答案 0 :(得分:1)
您可以将StartNew与自定义SynchonizationContext一起使用,也可以将Task设置为LongRunning。 LongRunning任务使用自己的线程。它会对性能造成影响(整个系统上运行的线程越多),但不会对ThreadPool上运行的其他东西产生影响。
Task.Factory.StartNew(() => DoThingy(), TaskCreationOptions.LongRunning)
您可以在此处查看TaskSchedulers http://msdn.microsoft.com/en-us/library/dd997402.aspx。