我想完成以下任务:
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
});
}
因为每个任务在第一组操作中实例化一个新对象,而第二组操作必须能够引用该实例。
我该如何做到这一点?
答案 0 :(得分: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
});
}