c# - 如何在用 C# 编写的控制台应用程序中捕获来自工作线程的错误

标签 c# multithreading parallel-processing threadpool

我目前有一个运行许多任务(使用 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/

相关文章:

c# - 亚马逊产品广告 API - 搜索多个 UPC

c# - <httpErrors> 不显示 css 或图像

c++ - dll中的QT事件循环

ios - GCD 优先级的意外结果

java - 多线程 OptimisticLockException

c++ - ArrayFire 并行 block 和

c# - C#并行ForEach保持值

c# - 无法为该文件显示设计器,因为无法设计其中的任何类。视觉 C#

c++ - 多线程与多处理

c# - 用于 C# 的 vkontakte api