C# AsOrdered()不工作

C# AsOrdered()不工作,c#,parallel-processing,C#,Parallel Processing,我尝试使用AsParallell()和AsOrdered()方法,但我总是看到无序的结果 using System; using System.Linq; using System.Collections.Generic; namespace Parallel { class MainClass { public static void Main(string[] args) { List<String> ci

我尝试使用
AsParallell()
AsOrdered()
方法,但我总是看到无序的结果

using System;
using System.Linq;
using System.Collections.Generic;

namespace Parallel
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            List<String> cities = new List<String>() {
                "Barcelona",
                "Valencia",
                "Sevilla",
                "Zaragoza",
                "Málaga",
                "Murcia",
                "Palma",
                "Las Palmas de Gran Canaria",
                "Alicante",
                "Madrid",
                "Córdoba",
                "Valladolid",
                "Tarrasa",
                "Vigo",
                "Gijón",
                "Cartagena",
                "Hospitalet de Llobregat",
                "Vitoria",
                "La Coruña",
                "Granada",
                "Elche",
                "Oviedo",
                "Badalona"
            };

            var filtered = cities.AsParallel().AsOrdered().Where(c => c.ToUpper().StartsWith("B") || c.ToUpper().EndsWith("A")).ToArray();

            Console.WriteLine("Cities starting with \"B\" or ends with \"A\"");

            foreach (String city in filtered) 
            {
                Console.WriteLine(city);
            }

        }
    }
}
使用系统;
使用System.Linq;
使用System.Collections.Generic;
名称空间并行
{
类主类
{
公共静态void Main(字符串[]args)
{
列表城市=新列表(){
“巴塞罗那”,
“巴伦西亚”,
“塞维利亚”,
“萨拉戈萨”,
“马拉加”,
“穆尔西亚”,
“帕尔玛”,
“拉斯帕尔马斯德格兰加那利”,
“阿利坎特”,
“马德里”,
“科尔多瓦”,
“瓦拉多利德”,
“塔拉萨”,
“维戈”,
“吉翁”,
“卡塔赫纳”,
“洛布雷加特医院”,
“维多利亚”,
“拉科鲁尼亚”,
“格拉纳达”,
“埃尔切”,
“奥维耶多”,
“巴达洛纳”
};
var filtered=cities.AsParallel().AsOrdered().Where(c=>c.ToUpper().StartsWith(“B”)| | c.ToUpper().EndsWith(“A”).ToArray();
Console.WriteLine(“以“B”开头或以“A”结尾的城市”);
foreach(过滤后的字符串城市)
{
控制台。WriteLine(城市);
}
}
}
}
输出为:

Cities starting with "B" or ends with "A" Barcelona Valencia Sevilla Zaragoza Málaga Murcia Palma Las Palmas de Gran Canaria Córdoba Tarrasa Cartagena Vitoria La Coruña Granada Badalona Press any key to continue... 以“B”开头或以“A”结尾的城市 巴塞罗那 巴伦西亚 塞维利亚 萨拉戈萨 马拉加 穆尔西亚 帕尔马 拉斯帕尔马斯德格兰加那利酒店 科尔多瓦 塔拉萨 卡塔赫纳 维多利亚 拉科鲁尼亚 格拉纳达 巴达洛纳 按任意键继续。。。 怎么了

我在Mac,Net核心项目中使用Visual Studio


谢谢

订购
并不意味着它将对您的收藏进行排序
AsOrdered
表示它将保留现有的顺序。因为您的集合最初是无序的-您的结果也是无序的

如果你愿意

 cities.Sort();
在并行查询之前-您的结果将被排序。但是,如果您这样做但删除了
AsParallel
,则不能保证您的结果是有序的。

AsOrdered()
只保留
列表中项目的原始顺序。如果要按字母顺序排列项目,可以使用
OrderBy
方法:

var filtered = cities.AsParallel().Where(c => c.ToUpper().StartsWith("B") || c.ToUpper().EndsWith("A")).OrderBy(x => x).ToArray();

几乎正确,始终提供预期结果和实际结果。