【问题标题】:Does Paralellism for a loop keep the order of execution for statements outside the loop循环的并行性是否保持循环外语句的执行顺序
【发布时间】:2014-08-02 05:41:29
【问题描述】:

问题:在下面给出的代码sn-p中,对循环的并行调用是否仍然保持循环前后方法的顺序?

也就是说,Method1会先执行,然后是Method2,然后是并行循环;一旦并行循环完成,只有 Method3 后跟 Method4 才会被调用。

Method1();
Method2();             
// Parallel loop
Parallel.ForEach(customers, customer => UpdateCustomerInfo(customer));
Method3();
Method4();

【问题讨论】:

    标签: c# foreach task-parallel-library


    【解决方案1】:

    是的,在 ForEach 的实现中有一个隐含的 wait。在所有并行任务完成之前,该方法不会返回,因此您可以保证每个任务都会在 Method3() 被调用之前完成。

    【讨论】:

    • 循环之前的方法也会按顺序执行吗?只是想确保外部的方法按顺序执行。
    • 是的,它还保证 Method2() 在 ForEach() 中的任何任务被调用之前返回,因此如所写,一切都按顺序执行。但是,如果 Method2() 生成一个执行其他操作的线程,则该线程不会与其中任何一个同步,除非您专门使用信号量。
    • 好的。很好的解释。立即获取。谢谢。
    猜你喜欢
    • 2013-07-06
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2013-04-13
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    相关资源
    最近更新 更多