Vas*_*nan 3 .net c# wpf multithreading task-parallel-library
以前我曾经使用后台工作线程进行服务调用而不是阻止UI线程.目前开始使用TPL,但理想情况下任务应该用于CPU密集型任务.
所以想知道使用任务设备进行服务调用是否有任何问题,因为有很多线程会在服务调用完成之前一直处于空闲状态?
另外,对于原始问题,是否可以保证在WPF应用程序中与UI线程不同的线程上始终调用创建的任务?
这TaskCreationOptions.LongRunning是为了什么.这告诉任务调度程序该任务需要一段时间才能完成,因此不会使用线程池的有限资源.
至于您的实际问题,在UI线程上执行任务的唯一可能方式是:
TaskScheduler.FromCurrentSynchronizationContext)TaskContinuationOptions.ExecuteSynchronously从UI线程上执行的任务继续的任务任务是计划以某种方式运行的工作的抽象.它不必是CPU密集型的.
通常,在创建a时Task,它使用默认调度程序,该调度程序在线程池上调度它(这意味着它不在UI线程上).您可以使用TaskScheduler.FromCurrentSynchronizationContext创建将工作发布到UI线程的调度程序.
要实现BackgroundWorker与任务类似的行为,您可以使用:
var syncScheduler = TaskScheduler.FromCurrentSynchronizationContext(); // must be called on the UI thread
var task = ... // create the task
task.ContinueWith(t => { /* update the UI here */ }, syncScheduler);
Run Code Online (Sandbox Code Playgroud)
关于服务电话,如果你不想浪费线程池中的线程在等待IO,你应该使用WCF的APM模式,结合TaskFactory.FromAsync中的说明这篇文章.
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |