使用TAP同时运行多个任务

时间:2015-01-22 09:01:40

标签: multithreading task tap

我的代码应该同时使用不同的方法开始排序3个不同的列表,并返回第一个完成。但是,它总是执行列表上的第一个任务。我该如何解决这个问题? 以下是我的代码的一部分,似乎与展示相关。

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;
            });
    }

1 个答案:

答案 0 :(得分:1)

由于您的任务列表为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 + ", ");
}