2015-01-22 5 views
0

Мой код должен одновременно запускать сортировку 3 разных списков с использованием разных методов и возвращать первый для завершения. Однако он всегда выполняет первую задачу в списке. Как я могу это исправить? Ниже приведено часть моего кода, которое казалось актуальным для показа.Выполнение нескольких задач одновременно с использованием TAP

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

Поскольку ваш список задач 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 + ", "); 
} 
Смежные вопросы