gpt4 book ai didi

c# - 将 Parallel.ForEach() 转换为扩展方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:41 25 4
gpt4 key购买 nike

我喜欢ForEach()方法,它有时很方便,另一方面对于并行场景我们有 Parallel.ForEach() .

因此,为了保持一致性,我创建了以下扩展方法:

public static class ParallelExtensions
{
public static void ForEachParallel<TSource>(this IEnumerable<TSource> source, Action<TSource> body)
{
Parallel
.ForEach(source, body);
}
}

然后用法将从标准语法改变

Parallel
.ForEach(listOfThings, t => DoWork(t));

与扩展(更容易阅读):

listOfThings
.ForEachParallel(t => DoWork(t));

问题:可以肯定的是,这种方法有什么内在的错误吗?我很担心,因为创建这样的方法作为 TPL 的一部分会非常容易,而且它不存在可能是有原因的?

最佳答案

没有错,就好像你写了一个“替换器”。然而,有几件事需要调查。

AggregateException 情况下的调用堆栈将在顶部显示您的扩展方法。

处理空参数场景

public static class ParallelExtensions
{
public static void ForEachParallel<TSource>(this IEnumerable<TSource> source, Action<TSource> body)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
Parallel
.ForEach(source, body);
}
}

另外,在你的通话中你可以让它更漂亮

代替

listOfThings.ForEachParallel(t => DoWork(t));

你可以写

listOfThings.ForEachParallel(DoWork);

关于c# - 将 Parallel.ForEach() 转换为扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37746925/

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