按值传递List <t>而不是参考Task状态

时间:2018-10-05 09:50:20

标签: c# .net

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

        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

它应该像上面那样打印数字1,我​​认为这是List传递给参考而不是值的问题,该如何解决?

1 个答案:

答案 0 :(得分:1)

使用创建列表的副本

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

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

这将创建单独的列表实例,每个任务之间不会共享该实例。