我正在尝试创建一个任务以打印列表的计数:
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
传递给参考而不是值的问题,该如何解决?
答案 0 :(得分:1)
使用创建列表的副本
Task t = new Task(action, new List<int>(test));
或
Task t = new Task(action, test.ToList());
这将创建单独的列表实例,每个任务之间不会共享该实例。