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不关心执行顺序。请参阅: