Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使不透明IEnumerable查询并行(PLINQ)_C#_Linq_Parallel Processing_Plinq - Fatal编程技术网

C# 使不透明IEnumerable查询并行(PLINQ)

C# 使不透明IEnumerable查询并行(PLINQ),c#,linq,parallel-processing,plinq,C#,Linq,Parallel Processing,Plinq,在函数中,我想对作为参数提供的IEnumerable进行并行处理 此IEnumerable已经是某些链接的结果,即: IEnumerable argument = InitialEnumerable.Select(x => DoHeavyProcessing(x))... 但对我来说,这是不透明的——我无法修改这个参数的创建方式。我不知道它是如何构造的 现在,当我调用argument.AsParallel()时,它没有任何用处-AsParallel()只会并行化右边的处理,但之前的所有工

在函数中,我想对作为参数提供的IEnumerable进行并行处理

此IEnumerable已经是某些链接的结果,即:

IEnumerable argument = InitialEnumerable.Select(x => DoHeavyProcessing(x))...
但对我来说,这是不透明的——我无法修改这个参数的创建方式。我不知道它是如何构造的

现在,当我调用argument.AsParallel()时,它没有任何用处-AsParallel()只会并行化右边的处理,但之前的所有工作都是按顺序运行的


相反,我需要以某种方式解析这个IEnumerable并“修饰”它,以便将繁重的工作并行化
IEnumerable
是专门设计的一种方式,在获取给定项之前,您无法获取该项


无论生成的是
IEnumerable
,都需要为这些项的并行生成提供某种类型的支持。

谢谢-所以我想最好的方法是让我的函数有一个签名,比如:function(ParallelQuery data),这样用户就知道他必须放AsParallel()可以利用的地方it@AdamDabrowski它仍然可以接受类型为
IEnumerable
的签名,只要调用方在执行昂贵投影的
Select
之前仍然使用类似于
aspallel
的内容。让您的方法接受一个
IEnumerable
仅仅意味着您执行的任何进一步的操作都将被序列化。当然,如果您接受一个
ParallelQuery
,那么您要做的主要事情就是向调用者发送一个信号,表明他们应该并行化您的查询。如果你想那样做,那就一定要那样做。如果大多数调用者不需要并行化他们的查询…我知道我可以保留一个更通用的签名(或者稍后检查参数/转换它)-在我的情况下,顺序查询将以不同于并行查询的方式处理(并行是生产者-消费者模型,SQLBulkCopy在单个线程中使用)。我想让用户从界面得到一个提示。谢谢你的回复,Servy!