使用Tasks异步执行任意操作

时间:2011-12-07 04:28:15

标签: c#

我想要使用任务并行库执行一组任意操作。我不想通过使用Task.Factory.StartNew来剥离新的后台线程。

如何使用Tasks框架异步执行任意操作?要使用Task.Factory.FromAsync,操作需要公开Begin和End方法。

对此有任何指导意见。

2 个答案:

答案 0 :(得分:1)

Task.Factory.StartNew() 暗示您正在启动后台线程。相反,TPL使用一个线程池,一旦线程可用,它就可以从中选择一个线程池来执行你传递的委托/方法。

所以是的,该方法将异步执行,不会导致新线程启动。在执行委托时,取决于TPL中的调度算法以及已经运行了多少竞争线程,通常TPL将尝试使用计算机上可用的所有处理器。

答案 1 :(得分:0)

您可以使用async / await在一个线程上运行异步操作。线程需要

 System.Threading.SynchronizationContext.Current != null

否则使用线程池线程! 使用来自例如的线程时,您将拥有一个同步上下文(带有消息队列) WinForms,WPF或Nito.Async.ActionThread。 见threadsafety and the message queue。 使用AsyncWcfLib来调用其他WCF服务的WCF服务。