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