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

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

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

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

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

textual
Листинг программы
using System;
using System.Threading;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
 
class Program
{
    static void Main()
    {
        Foo();
 
        Console.ReadKey();
    }
 
    static async void Foo()
    {
        List<int> abc = new List<int>() { 1 };
 
        IEnumerable<Task<int>> Download = from tag in abc
                                          select CreateStubAsync();
 
        List<Task<int>> donwloadTask = Download.ToList();
 
        while (donwloadTask.Count > 0)
        {
            Task<int> first = await Task.WhenAny(Download);
            donwloadTaskAsync.Remove(first);
            var curr = first.Result;
 
            int threadId = Thread.CurrentThread.ManagedThreadId;
            Console.WriteLine(threadId);
 
            Console.WriteLine(curr);
        }
    }
 
    public static async Task<int> CreateStubAsync()
    {
        Task<int> curr = Task.Run(
            () =>
            {
                int threadId = Thread.CurrentThread.ManagedThreadId;
                Console.WriteLine(threadId);
 
                Thread.Sleep(1000);
                return 123;
            });
 
        int ncurr = await curr;
        return ncurr;
    }
}

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


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

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

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