我正在处理的应用程序使用线程池。这是基本的伪代码。

在主线程上

foreach(Object obj in Component.GetObject())
{
    //Invoke the thread pool providing the call back (method to be called on the background// thread) and pass the object as the parameter.
}
//Wait for the threads to complete.

“Component.GetObject”基本上将使用Yield return返回一个CLR对象。该对象需要由线程上的其他两个组件处理。因此,我们正在调用提供回调方法(将调用这两个组件)的线程池。

如果在生成的线程上存在异常,则需要通知父线程,以便它可以退出for循环(即,停止产生更多线程),等待生成的线程完成,然后处理该异常。

根据我的阅读,方法之一是在主线程上具有一个“标志”变量。如果在生成的线程上存在异常,则该线程将使用锁定机制来设置变量。父线程会在产生新线程之前检查“flag”变量。

我想知道是否有更好的方法来处理这种情况。正在使用线程池,因为如果“for”循环产生的线程数超过了线程池限制,它将管理线程的排队。

最佳答案

我认为标准方法是只引发异常,然后让处理线程池的代码处理该异常。在您的实现中这不可能吗?

即使处理了异常,也没有什么阻止您将一个线程从其他线程之一扔到主线程中。

//thread code
try{
    //something
}
catch (IOException e){
    //handle your exception

    //and then throw another one, that you can catch later
    throw new ThreadFailedException()
}

10-07 23:29