【问题标题】:How to synchronize parallel actions in .NET?如何在 .NET 中同步并行操作?
【发布时间】:2013-10-23 21:15:56
【问题描述】:

我想完成以下工作:

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 一个简单的数组可以让您将对象从第一个循环传输到第二个循环。

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


【解决方案1】:

我建议您完全按照您的第二个代码 sn-p 执行操作,但为这些新创建的对象保留一个数组 - 在循环中填充它们,然后在第二个中访问它们。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多