C#LINQ中并行计算的值顺序
我正在尝试创建一个特定的C#LINQ中并行计算的值顺序,c#,linq,C#,Linq,我正在尝试创建一个特定的图像[],它是从字节[]创建的。以下是LINQ中的代码: return thumbnails.AsParallel() .Select(t => FromByteArray(t)) .ToArray() 以下是所用方法的代码: public static Image FromByteArray(byte[] arr) { using (Mem
图像[]
,它是从字节[]
创建的。以下是LINQ中的代码:
return thumbnails.AsParallel()
.Select(t => FromByteArray(t))
.ToArray()
以下是所用方法的代码:
public static Image FromByteArray(byte[] arr)
{
using (MemoryStream ms = new MemoryStream(arr))
return new Bitmap(ms);
}
它会一直有效吗?那么,这一秩序会得到维护吗
编辑
如何保留订单?默认情况下,不保留订单。然而,您所需要做的只是添加,然后它将保持秩序
return thumbnails.AsParallel()
.AsOrdered()
.Select(t => FromByteArray(t))
.ToArray()
或者,使用原始语法
return (from t in thumbnails.AsParallel().AsOrdered()
select FromByteArray(t))
.ToArray();
有关更多详细信息,请参阅MSDN文章“”(感谢链接)@EZI不,如果没有,您可以并行处理,但要保持顺序。唯一的限制是你不能(轻松地)并行地获得“流式结果”并保持顺序。@Randolph你的语法对我来说非常奇怪,混合了这两种风格。我不知道这是否有效。但是我知道
thumbnails.AsParallel().Select(t=>fromtearray(t)).ToArray()
可以工作。(仍然不确定这是否能维持秩序)@ScottChamberlain我真的很想看到一个这样的例子。其中taskN应该在taskN+1之前执行,并且它们是并行执行的。@EZI我从来没有说过它们将按顺序处理,只有所述处理的输出可以与所述处理的输入的顺序相同(这是OP希望确认的,图像[]的顺序
的顺序与IEnumerable的顺序相同。编辑:重新阅读您的原始注释,您所说的是保留执行顺序,而不是输出顺序。OP不关心执行顺序。请参阅: