1

我想完成以下任务:

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

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

我怎样才能做到这一点?

4

1 回答 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
    });
}
于 2013-10-23T21:19:51.657 回答