首页 > 解决方案 > 运行多个任务以更改链表 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;
    }

标签: c#

解决方案


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

希望能帮助到你!


推荐阅读