代码之家  ›  专栏  ›  技术社区  ›  Moon soon

通过值而不是任务状态的引用传递列表

  •  1
  • Moon soon  · 技术社区  · 6 年前

    我正在尝试创建一个任务以打印列表计数:

            List<int> test = new List<int>{1};
    
            Task t = new Task((o) =>
            {
                List<int> a = (List<int>)o;
                Console.WriteLine(a.Count);
            }, test);
    
            t.Start();
            t.Wait();
    

    以上代码打印编号1,按预期工作:

    1
    

    List<int> test 任务开始前:

            List<int> test = new List<int>{1};
    
            Task t = new Task((o) =>
            {
                List<int> a = (List<int>)o;
                Console.WriteLine(a.Count);
            }, test);
    
            test.Clear();
            t.Start();
            t.Wait();
    

    但打印出来的号码是一样的 0 :

    0
    

    List 作为引用而不是值传递,如何修复?

    1 回复  |  直到 6 年前
        1
  •  1
  •   adjan    6 年前

    使用创建列表的副本

    Task t = new Task(action, new List<int>(test));
    

    Task t = new Task(action, test.ToList());