的任务.当延续操作未内联时,启动失败
本文关键字:启动 失败 任务 延续 操作 | 更新日期: 2023-09-27 17:53:58
以下代码的错误是什么?的任务。启动失败,索引超出范围异常。更明确地说…它失败了,因为在for循环中I的值是3 !!
ActionProvider m1 = new ActionProvider();
ActionProvider m2 = new ActionProvider();
ActionProvider m3 = new ActionProvider();
List<Action> actions = new List<Action>()
{
()=> { m2.DoIt(); },
()=> { m3.DoIt(); },
};
Task t = new Task(() => { m1.DoIt(); });
for (int i = 0; i < actions.Count; i++)
{
t.ContinueWith(t1 => actions[i]());
}
t.Start();
这可能是因为您多次重用了相同的变量i。所以当你执行任务的时候,i是递增的。
试着这样改变for循环:
for (int i = 0; i < actions.Count; i++)
{
var action = actions[i];
t.ContinueWith(t1 => action());
}
这里唯一的区别是我创建了一个变量的副本,我传递给ContinueWith。