C# 普林克 .查询中的 AsParallel() 位置

本文关键字:AsParallel 位置 林克 查询 | 更新日期: 2023-09-27 18:36:12

StackOverflow,

在 C# PLINQ 中,我了解".AsParallel()"会影响查询的运行方式。 例如,其中".AsParallel()"发生在查询的中间,它将在方法之前按顺序执行,在方法之后并行执行。(PLINQ:.NET 中的并行查询)。

我的问题是,对于更复杂的查询(如下),其中".AsParallel"出现在查询的开头(作为 的前缀)。选择)以下所有方法也会并行执行吗? (目前,".AsParallel"发生在 之后。选择)。

  Collection =
   typeof (Detail).GetProperties(BindingFlags.Public | BindingFlags.Instance)
     .SelectMany(propertyInfo => recentPhases
      .Where(phase => phase.Finalised)
      .SelectMany(phase => phase.PhaseDetail
      .Select(keyValuePair => new
     {
      phase.Direction,
      phase.Momentum,
      keyValuePair.Key,
      keyValuePair.Value
     }))
     .Select(arg => new
     {
      Key = new BmkKey
      {
       Direction = (arg.Direction == Dir.Up ? Dir.Up : Dir.Down),
       Momentum = (arg.Momentum == Mom.Price ? Mom.Price : Mom.Time),
       BarNumber = arg.Key,
       DetailType = propertyInfo.Name
      },
      Value = (double) propertyInfo.GetValue(arg.Value, null)
     }))
    .AsParallel().GroupBy(grp => grp.Key)
    .ToDictionary(grp => grp.Key, grp => new Distribution(grp.Select(x => x.Value)));

C# 普林克 .查询中的 AsParallel() 位置

是的,调用 AsParallel() 方法后,所有内容都将并行执行。从 msdn:

public static ParallelQuery<TSource> AsParallel<TSource>(
this IEnumerable<TSource> source)

所以输入是IEnumerable<T>,输出是ParallelQuery<T>

如果我们再看一下 ParallelEnumerable 类:

提供一组用于查询实现 ParallelQuery{TSource} 的对象的方法。这是枚举的并行等效项。

因此,从那时起,您将不会调用为IEnumerable<T>定义的方法,而是调用为ParallelEnumerable定义的并行对应项。