5

我有一个使用多个线程的集成测试。我希望任何线程都能够通过测试(并拆除其余线程)。但是,后台线程上的异常会导致 MSTest 失败——您只会得到一个错误:

测试运行时代理进程已停止

我想我可以在后台线程上捕获任何异常,并唤醒主线程以使测试失败,但是有没有更简单/更优雅的方法?

4

1 回答 1

0

如果您绝对需要使用不同的线程(而不是ThreadPool一个),您可以使用TaskwithTaskCreationOptions.LongRunning选项,该选项将为该任务创建一个专用线程(而不是来自 的线程ThreadPool)。然后您可以检查该任务IsFaultedException属性。这是一个简单的代码:

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);
}
于 2013-05-09T09:17:36.813 回答