2013-10-23 21 views
1

我想完成以下任务:如何在.NET中同步并行操作?

void Method() 
{ 
    Parallel.For(0, 100, i => 
    { 
     // Do first set of actions 

     // Wait for all tasks to finish performing first set of actions 

     // Do second set of actions 
    }); 
} 

我不能简单地做

void Method() 
{ 
    Parallel.For(0, 100, i => 
    { 
     // Do first set of actions 
    }); 

    Parallel.For(0, 100, i => 
    { 
     // Do second set of actions 
    }); 
} 

,因为每个任务实例在第一组动作一个新的对象,而第二组动作必须是能够引用该实例。

我该如何做到这一点?

+1

一个简单的数组可以让你将对象从第一个循环传送到第二个循环。 –

回答

3

我建议你完全按照你的第二个代码片段做,但为这些新创建的对象保留一个数组 - 将它们填充到循环中,并在第二个循环中访问它们。

void Method() 
{ 
    var intermediates = new Intermediate[100]; 
    Parallel.For(0, 100, i => 
    { 
     // ... 
     intermediates[i] = ...; 
    }); 

    Parallel.For(0, 100, i => 
    { 
     var intermediate = intermediates[i]; 
     // ... use intermediate 
    }); 
}