gpt4 book ai didi

c# - 使用 Parallel.Foreach 中的 ParallelOptions 在串行和并行操作之间切换

转载 作者:行者123 更新时间:2023-12-03 23:00:15 26 4
gpt4 key购买 nike

我们在代码中广泛使用了 Parallel.Foreach,唯一的挑战是如何在 DEBUG 模式下使用可视化调试时使其串行化,以下是我们正在做的事情,请分享您的观点:

public static class ParallelOptionsWrapper
{
// Private instance of ParallelOptions
private static readonly ParallelOptions @ParallelOptions;

// Private constructor
static ParallelOptionsWrapper()
{
@ParallelOptions = new ParallelOptions();

#if DEBUG
// 1 is sequential
@ParallelOptions.MaxDegreeOfParallelism = 1;
#else
// -1 is unlimited
@ParallelOptions.MaxDegreeOfParallelism = -1;
#endif
}

public static ParallelOptions Instance() { return @ParallelOptions; }
}

使用方法如下:

Parallel.ForEach(EnumerableList, ParallelOptionsWrapper.Instance(), element =>
{
// Code to run in Parallel
}

在这种情况下,所有 Parallel.Foreach 调用都具有相同的 ParallelOptions 实例,在我看来应该没问题。

这安全吗?这样有效吗?

最佳答案

Is it safe?

是的。只要你不使用取消。

Is this efficient?

只不过是使用单独的实例(即删除所有静态内容)。
所以这是可以接受的,但肯定不是一个好的做法。

您所需要的只是:

public static ParallelOptions StandardParallelOptions() 
{
otions = new ParallelOptions();
#if DEBUG
// 1 is sequential
options.MaxDegreeOfParallelism = 1;
#else
// -1 is unlimited
options.MaxDegreeOfParallelism = -1;
#endif
return options; // separate instance for each loop
}

这将允许设置 CancellationToken 等。

关于c# - 使用 Parallel.Foreach 中的 ParallelOptions 在串行和并行操作之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28759162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com