Task.Run没有在后台运行但在Dispatcher上运行[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我有一个阻塞UI线程的CPU密集型任务,经过调查我发现问题的根源似乎是在Dispatcher线程中实际运行的Task.Run:

Task.Run(() =>
{
    if (Dispatcher.CurrentDispatcher.Thread == Thread.CurrentThread)
    {
        // breakpoint
    }
});

在if语句中放置断点会被命中。

这是预期的行为吗?我理解Task.Run使用不同的线程。

c# wpf task-parallel-library
1个回答
1
投票

如果使用默认任务调度程序(默认情况下),则传递给Task.Run的操作将在线程池线程上执行。

这应该给你预期的结果:

Task.Run(() =>
{
    if (System.Windows.Application.Current.Dispatcher.Thread == Thread.CurrentThread)
    {
        // breakpoint not hit in WPF...
    }
});

System.Windows.Application.Current.DispatcherSystem.Windows.Threading.Dispatcher.CurrentDispatcher之间的区别是:

Dispatcher.CurrentDispatcher vs. Application.Current.Dispatcher

© www.soinside.com 2019 - 2024. All rights reserved.