如何在.NET中同步并行操作?

时间:2013-10-23 21:15:56

标签: c# .net multithreading task-parallel-library

我想完成以下任务:

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 个答案:

答案 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
    });
}