运行 使用 TAP 同时执行多个任务

Run multiple tasks at the same time using TAP

我的代码应该同时开始使用不同的方法对 3 个不同的列表进行排序,return 第一个完成。但是它总是执行列表中的第一个任务。我该如何解决? 下面是我的部分代码,似乎与展示相关。

static List<Task<List<int>>> listoftasks = new List<Task<List<int>>>() { QuickSortAsync(list1), BubbleSortAsync(list2), SelectionSortAsync(list3) };

    public async static void caller()
    {
        List<int> result = await Task.WhenAny(listoftasks).Result;
        foreach (var item in result)
            Console.Write(item + ", ");
    }

    static Task<List<int>> QuickSortAsync(List<int> l)
    {
        return Task.Run<List<int>>(() =>
            {
                l.Sort();
                return l;
            });
    }

由于您的任务列表是 static,您很早就开始了所有三项任务。然后,当您调用 WhenAny 时,它们很可能已经全部完成。

我建议你在调用WhenAny时开始任务:

public static async Task CallerAsync()
{
  List<int> result = await await Task.WhenAny(QuickSortAsync(list1),
      BubbleSortAsync(list2), SelectionSortAsync(list3));
  foreach (var item in result)
    Console.Write(item + ", ");
}