gpt4 book ai didi

c# - 是否可以保证使用任务工厂创建的任务不会在 WPF 的 UI 线程中安排?

转载 作者:行者123 更新时间:2023-11-30 13:27:31 25 4
gpt4 key购买 nike

以前我使用后台工作线程进行服务调用并且不阻塞 UI 线程。目前开始使用 TPL,但理想情况下任务应该用于 CPU 密集型任务..

所以想知道使用任务因子进行服务调用是否有任何问题,因为在服务调用完成之前会有许多线程处于空闲状态?

关于原始问题,是否可以保证创建的任务将始终在不同于 WPF 应用程序中的 UI 线程的线程上调用?

最佳答案

任务是对安排以某种方式 运行的工作的抽象。它不一定是 CPU 密集型的。

通常,当您创建一个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);

关于服务调用,如果不想浪费线程池线程等待IO,应该使用WCF的APM模式,与 TaskFactory.FromAsync 结合,如 this post 中所述.

关于c# - 是否可以保证使用任务工厂创建的任务不会在 WPF 的 UI 线程中安排?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10569530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com