我的代码应该同时使用不同的方法开始排序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;
});
}
答案 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 + ", ");
}