C# 任务。运行不是在后台运行,而是在调度程序上运行
我有一个CPU密集型任务阻塞了UI线程,在调查之后,我发现问题的根源似乎是任务。实际运行在Dispatcher线程中:C# 任务。运行不是在后台运行,而是在调度程序上运行,c#,wpf,task-parallel-library,C#,Wpf,Task Parallel Library,我有一个CPU密集型任务阻塞了UI线程,在调查之后,我发现问题的根源似乎是任务。实际运行在Dispatcher线程中: Task.Run(() => { if (Dispatcher.CurrentDispatcher.Thread == Thread.CurrentThread) { // breakpoint } }); 在命中if语句时在其中放置断点 这是预期的行为吗?我了解任务。运行以使用不同的线程。如果使用默认任务调度程序(默认情况下是这
Task.Run(() =>
{
if (Dispatcher.CurrentDispatcher.Thread == Thread.CurrentThread)
{
// breakpoint
}
});
在命中if语句时在其中放置断点
这是预期的行为吗?我了解任务。运行以使用不同的线程。如果使用默认任务调度程序(默认情况下是这样),则传递给任务的操作。运行将在线程池线程上执行 这将为您提供预期的结果:
Task.Run(() =>
{
if (System.Windows.Application.Current.Dispatcher.Thread == Thread.CurrentThread)
{
// breakpoint not hit in WPF...
}
});
System.Windows.Application.Current.Dispatcher
和System.Windows.Threading.Dispatcher.CurrentDispatcher
之间存在差异:
我知道我一定做了些蠢事。谢谢