运行多个任务以更改链接列表C#

时间:2018-11-14 19:47:09

标签: c#

我正在尝试在特定节点之后添加值。每个任务都应按索引从给定列表中添加值。 例如:列表包含2个数字{1,10}我想在10之后加上6个值,因此它看起来像{1,10,11,12,13,14,15,16}。 问题在于它将最后一个值添加N次,结果为{1,10,16,16,16,16,16,16}。

static async Task<LinkedList<int>> ParrallelInsertion(List<int> values, LinkedList<int> list)
    {
        var tasks = new List<Task>();

        for (int i = 0; i < values.Count-1; i++)
        {
            tasks.Add(Task.Run(
                () =>
                {
                    lock (list)
                    {
                        var node = list.Find(10);
                        if (node == null)
                        {
                            list.AddLast(values[i]);
                        }
                        else
                        {
                            list.AddAfter(node, values[i]);
                        }
                    }
                }
                ));
        }

        await Task.WhenAll(tasks);
        return list;
    }

1 个答案:

答案 0 :(得分:0)

我认为将整个 Task.RunCode (包括对 Task.Run 的调用)移至专用方法应该可以解决问题,并在每次迭代时都调用该方法循环。

希望有帮助!