Pig*_*let 1 c# concurrency mutex asynchronous parallel.foreachasync
据我了解,Parallel.ForeachAsync 调用中的委托会同时执行多次。
如果该委托操作的变量不是该委托的本地变量怎么办?
假设我在委托中增加了一个静态计数器。我需要通过互斥锁或其他东西来保护计数器吗?
Parallel不是魔法。您需要使用所有常用机制来防止访问共享状态和最坏的情况,如果无法避免,请同步它。
当然,如果您只是在 a 中进行同步Parallel,您很快就会发现它完全毫无价值,以占用更多 CPU 为代价,只能获得更好的结果(甚至更糟)。这个想法是将工作分解为互不影响的工作 - 例如,通过确保您正在操作的集合已经拥有它所需的所有输入,并且只将输出生成到输出集合中。然后就Parallel可以尽最大努力提高效率。但当然,只有当批次足够大以支付同步成本时,它才有效。
请记住,这Parallel有很多小怪癖,因此请进行概要分析、阅读并非常小心地了解正在发生的事情。这不是魔法。