代码之家  ›  专栏  ›  技术社区  ›  Toan Nguyen

我对平行线做了什么错事。

  •  1
  • Toan Nguyen  · 技术社区  · 8 年前

    我有以下C语言中parallel.foreach的代码#

    internal class Program
    {
        private static void Main(string[] args)
        {
            var recordList = new List<string> {"1", "two", "three", "four", "five", "six"};
    
            var result = new ConcurrentBag<ProcessedData>();
    
            Parallel.ForEach<string, ProcessedData>(recordList, () => null //local init
                , (record, state, index, localInit) => //body
                {
                    Console.WriteLine($"Processing {record}");
                    var integerValue = record.Length;
                    var processedString = record + " Processed";
    
                    localInit = new ProcessedData
                    {
                        IntegerValue = integerValue,
                        StringValue = processedString
                    };
    
                    return localInit;
                }, bodyResult => //local finally
                {
                    Console.WriteLine($"Adding {bodyResult.StringValue}");
                    result.Add(bodyResult);
                });
    
    
            foreach (var item in result)
            {
                Console.WriteLine($"{item.StringValue}");
            }
    
            Console.ReadLine();
        }
    
        private sealed class ProcessedData
        {
            internal int IntegerValue { get; set; }
            internal string StringValue { get; set; }
        }
    

    当我运行程序时,我希望控制台打印出来 “1加工”、“2加工”、“3加工”、“4加工”、“5加工”、“6加工”。但是,只处理了一些项目!!!!

    enter image description here

    你知道密码出了什么问题吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Servy    8 年前

    最后不运行该操作 集合中的每个项目 . 如果你想执行一些操作 集合中的每个项目 这就是身体的作用。初始化并最终用于初始化和关闭 每个工作线程的 . 所以您的打印输出告诉您在处理项目时使用了三个线程。

    推荐文章