我有一个使用多个线程的集成测试。我希望任何线程都能够通过测试(并拆除其余线程)。但是,后台线程上的异常会导致 MSTest 失败——您只会得到一个错误:
测试运行时代理进程已停止
我想我可以在后台线程上捕获任何异常,并唤醒主线程以使测试失败,但是有没有更简单/更优雅的方法?
我有一个使用多个线程的集成测试。我希望任何线程都能够通过测试(并拆除其余线程)。但是,后台线程上的异常会导致 MSTest 失败——您只会得到一个错误:
测试运行时代理进程已停止
我想我可以在后台线程上捕获任何异常,并唤醒主线程以使测试失败,但是有没有更简单/更优雅的方法?
如果您绝对需要使用不同的线程(而不是ThreadPool
一个),您可以使用Task
withTaskCreationOptions.LongRunning
选项,该选项将为该任务创建一个专用线程(而不是来自 的线程ThreadPool
)。然后您可以检查该任务IsFaulted
的Exception
属性。这是一个简单的代码:
var task = new Task(() => { throw new InvalidOperationException(); }, TaskCreationOptions.LongRunning);
task.Start();
try { task.Wait(); }
catch { }
if (task.IsFaulted)
{
// do something about the exception
Console.WriteLine(task.Exception);
}