我目前有一个运行许多任务(使用 Parallel.ForEach)的小型控制台应用程序,并且这些任务中的每一个都使用 ThreadPool.QueueUserWorkItem 创建子线程.
我希望应用程序能够处理这些任务/线程抛出的任何异常。
如果线程抛出任何错误,用 try..catch 包围 Parallel.ForEach 语句是否有效,还是它们会消失?
编辑:这些子线程模拟系统的用户。引用this question.
最佳答案
包围语句将不起作用。你可以这样做:
public static void Main(string[] args)
{
string[] files = System.IO.Directory.GetFiles(@".", "*.*");
Parallel.ForEach(files, x =>
{
try
{
MyAction(x);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
});
}
static void MyAction(string x)
{
throw new ApplicationException("Testing: " + x);
}
关于c# - 如何在用 C# 编写的控制台应用程序中捕获来自工作线程的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325370/