在LINQ中并行计算的C#值顺序

时间:2015-03-07 20:58:50

标签: c# linq

我正在尝试创建从Image[]创建的特定byte[]。这是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);
    }

它会一直有效吗?订单会被保留吗?

修改

如何保存订单?

1 个答案:

答案 0 :(得分:1)

默认情况下,不会保留订单。但是,您需要做的只是添加.AsOrdered()然后保留顺序。

return thumbnails.AsParallel()
                 .AsOrdered()
                 .Select(t => FromByteArray(t))
                 .ToArray()

或使用原始语法

return (from t in thumbnails.AsParallel().AsOrdered()
        select FromByteArray(t))
        .ToArray();

有关更多详细信息,请参阅MSDN文章“Order Preservation in PLINQ”(感谢Ian Mercer链接)