的任务.当延续操作未内联时,启动失败

本文关键字:启动 失败 任务 延续 操作 | 更新日期: 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。