C# 聚合和转发来自多个线程的异常

C# 聚合和转发来自多个线程的异常,c#,.net,multithreading,exception-handling,C#,.net,Multithreading,Exception Handling,在我的方法中,我启动多个线程,然后等待它们完成工作(类似于fork-join模式) 使用(var countdownEvent=new countdownEvent(runningthreadscont)) { 对于(int i=0;i

在我的方法中,我启动多个线程,然后等待它们完成工作(类似于fork-join模式)

使用(var countdownEvent=new countdownEvent(runningthreadscont))
{
对于(int i=0;i
现在,我需要能够捕获此线程中的异常(假设
//Do something
可能引发异常),将异常传递给主线程,取消阻止它(因为它正在等待
countdownEvent
),然后重新引发异常

实现这一目标最优雅的方法是什么?

解决了我的问题。感谢flq的建议

var cancellationTokenSource = new CancellationTokenSource();
var tasks = new Task[threadsCount]
for (int i = 0; i < threadsCount; i++)
{
    tasks[i] = Task.Factory.StartNew(
        delegate
            {
                // Do something
            }, cancellationTokenSource.Token);
}

try
{
    Task.WaitAll(tasks);
}
catch (AggregateException ae)
{
    cancellationTokenSource.Cancel();
    throw ae.InnerExceptions[0];
}
var cancellationTokenSource=new cancellationTokenSource();
var tasks=新任务[ThreadScont]
对于(int i=0;i
解决了我的问题。感谢flq的建议

var cancellationTokenSource = new CancellationTokenSource();
var tasks = new Task[threadsCount]
for (int i = 0; i < threadsCount; i++)
{
    tasks[i] = Task.Factory.StartNew(
        delegate
            {
                // Do something
            }, cancellationTokenSource.Token);
}

try
{
    Task.WaitAll(tasks);
}
catch (AggregateException ae)
{
    cancellationTokenSource.Cancel();
    throw ae.InnerExceptions[0];
}
var cancellationTokenSource=new cancellationTokenSource();
var tasks=新任务[ThreadScont]
对于(int i=0;i
您有权访问.net 4吗?tasks API已经知道聚合异常…您有权访问.net 4吗?任务API已知道聚合异常。。。