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;
}
}