我想要使用任务并行库执行一组任意操作。我不想通过使用Task.Factory.StartNew来剥离新的后台线程。
如何使用Tasks框架异步执行任意操作?要使用Task.Factory.FromAsync,操作需要公开Begin和End方法。
对此有任何指导意见。
答案 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服务。