Async/Await Id задач меняется - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Не совсем разобрался в асинхронности. Функция CreateStub просто заглушка. Вызываю другой метод, но суть в том ,что не понимаю как запустить эти задачи. Как корректно запустить список этих задач ?
Листинг программы
  1. List<int> abc = new List<int>() { 1, 2, 3 };
  2. IEnumerable<Task<int>> Download = from tag in abc select CreateStub();
  3. List<Task<int>> donwloadtask = Download.ToList();
  4. while(donwloadtask.Count >0)
  5. {
  6. Task<int> first = await Task.WhenAny(Download);
  7. donwloadtask.Remove(first);
  8. var curr = first.Result;
  9. Console.WriteLine(curr);
  10. }
Листинг программы
  1. public static async Task<int> CreateStub()
  2. {
  3. Task<int> curr = new Task<int>(
  4. () =>
  5. {
  6. Thread.Sleep(1000);
  7. return 123;
  8. });
  9. int ncurr = await curr;
  10. return ncurr;
  11. }

Решение задачи: «Async/Await Id задач меняется»

textual
Листинг программы
  1. using System;
  2. using System.Threading;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using System.Threading.Tasks;
  6.  
  7. class Program
  8. {
  9.     static void Main()
  10.     {
  11.         Foo();
  12.  
  13.         Console.ReadKey();
  14.     }
  15.  
  16.     static async void Foo()
  17.     {
  18.         List<int> abc = new List<int>() { 1 };
  19.  
  20.         IEnumerable<Task<int>> Download = from tag in abc
  21.                                           select CreateStubAsync();
  22.  
  23.         List<Task<int>> donwloadTask = Download.ToList();
  24.  
  25.         while (donwloadTask.Count > 0)
  26.         {
  27.             Task<int> first = await Task.WhenAny(Download);
  28.             donwloadTaskAsync.Remove(first);
  29.             var curr = first.Result;
  30.  
  31.             int threadId = Thread.CurrentThread.ManagedThreadId;
  32.             Console.WriteLine(threadId);
  33.  
  34.             Console.WriteLine(curr);
  35.         }
  36.     }
  37.  
  38.     public static async Task<int> CreateStubAsync()
  39.     {
  40.         Task<int> curr = Task.Run(
  41.             () =>
  42.             {
  43.                 int threadId = Thread.CurrentThread.ManagedThreadId;
  44.                 Console.WriteLine(threadId);
  45.  
  46.                 Thread.Sleep(1000);
  47.                 return 123;
  48.             });
  49.  
  50.         int ncurr = await curr;
  51.         return ncurr;
  52.     }
  53. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут