max*_*axp 1 c# parallel-processing task threadpool
我相信,虽然不太可能,但排队使用的任务有可能Task.Run()最终在主线程上运行。
我担心(在我的 WPF 应用程序中),如果我App.Current.Dispatcher.Invoke()在此任务中使用或类似的,我会导致死锁。
这是一种有效的恐惧吗?如果是这样,有没有办法防止这种情况发生(不检查当前线程*不是*主线程)。
谢谢
我相信,虽然不太可能,但使用 Task.Run() 排队的任务有可能最终在主线程上运行。
你相信错误:这是不可能的。Task.Run调度到 ThreadPool,而不是 UI 线程的调度程序。两者是完全分开的。
我担心(在我的 WPF 应用程序中),如果我在这个任务中使用 App.Current.Dispatcher.Invoke() 或类似的,我会导致死锁。
Invoke由于存在死锁的风险,您无论如何都应该避免使用。风险在于 UI 线程正在等待您的线程执行某些操作,并且通过同步等待 UI 线程有足够的空闲时间来处理您的消息,您将面临死锁的风险。
您通常可以BeginInvoke改为使用(有一个后台线程,其进度取决于 UI 正在做什么通常是糟糕的设计),但是当您使用await和Progress<T>/时很少需要它IProgress<T>。
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |