相关疑难解决方法(0)

在.NET 4 TPL中杀死一个死锁的任务

我想开始使用任务并行库,因为这是执行异步操作的推荐框架.我无法找到的一件事是强制中止的任何方法,例如Thread.Abort提供的内容.

我特别关注的是我安排运行代码的任务,我不希望完全信任.特别是,我不能确定这个不受信任的代码不会死锁,因此我无法确定使用此代码的任务我是否会完成.我想远离真正的AppDomain隔离(由于编组的开销和复杂性),但我也不想让任务线程挂起,死锁.有没有办法在TPL中做到这一点?

.net parallel-processing deadlock task task-parallel-library

6
推荐指数
1
解决办法
5035
查看次数

程序崩溃后如何挂起所有线程?

我有一个未处理的异常处理程序.它显示了一个很好的GUI,并允许用户发送错误报告.用户甚至可以留下他们的姓名,电话号码和东西,我们的支持部门会回电话.效果很好,看起来不错,让客户不那么生气.无论如何,在理论上.

问题是我的应用程序使用后台线程,并且线程似乎并不关心是否抛出异常,例如,GUI线程(这是有道理的),并且只是继续他们的工作.如果用户让我的自定义异常处理程序窗口保持打开足够长的时间,最终会弹出一个WER对话框,使其看起来像错误处理程序本身崩溃.

我无法访问异常处理程序范围内的线程对象,因此我无法暂停它们.使线程对象全局可访问也不是解决方案.我现在的解决方法是Globals.Crashed = true;在我的异常处理程序中使用类似的东西,让我的线程方法在每次循环迭代时检查该属性.不完美,但它最大限度地减少了伤害.

有没有人知道一个不那么黑客的方法?我的方法有误吗?我是否必须像WER那样做,并启动一个暂停主程序并显示错误UI的外部程序?

c# multithreading exception windows-error-reporting

5
推荐指数
1
解决办法
784
查看次数