【发布时间】:2021-12-29 05:48:35
【问题描述】:
我有一个启动多个后台线程的多线程 UI 应用程序。许多这些线程执行如下代码:
public void Update(){
if(Dispatcher.HasShutdownStarted()) return;
Dispatcher.Invoke(()=>{...});
...
}
那我有时可能有一个线程执行下面的代码
pubic void Shutdown(){
if(Dispatcher.HasShutdownStarted()) return;
Dispatcher.InvokeShutdown();
}
问题是有时一个线程在另一个线程执行Dispatcher.HasShutdwonStarted() 之后执行Dispatcher.InvokeShutdown(),但在它到达Dispatcher.Invoke(()=>{...}) 之前。这意味着,一旦 Dispatcher 开始关闭,就会有一个线程尝试在 Dispatcher 上执行 lambda。那就是我遇到异常的时候。什么是最好的解决方案?
【问题讨论】:
-
“那是我得到异常的时候。”比如哪些异常?
-
System.Threading.Tasks.TaskCanceledException
标签: c# multithreading atomic dispatcher