Я хотел бы загружать данные асинхронным способом из различных служб через HttpClient
(для тестирования я создал несколько методов с Task.Delay
). Итак, сначала я решил создать список задач и в конце концов использовать await Task.WhenAll(tasks)
, чтобы все ждать.
Все работает так, как я хочу, но есть одна проблема, если я передаю лямбду в tasks.Add()
. Я должен использовать Task.Run
, потому что без него нельзя использовать await внутри.
Итак, мой вопрос:
Будет ли это Task.Run()
создавать дополнительные издержки? Потому что при операции ввода-вывода мы не должны использовать Task.Run
, а просто asyn c await.
class Program
{
public static async Task<int> DownloadDelay15()
{ await Task.Delay(15000); return 15; }
public static async Task<int> DownloadDelay2()
{ await Task.Delay(1000); return 2; }
static async Task Main(string[] args)
{
var tasks = new List<Task<int>>();
tasks.Add(DownloadDelay15());
tasks.Add(DownloadDelay2());
tasks.Add(Task.Run(async () => //additional overhead?
{
await Task.Delay(1000);
return 6;
}));
var watch = Stopwatch.StartNew();
var results = await Task.WhenAll(tasks);
watch.Stop();
var elapsedSeconds = watch.Elapsed.Seconds;
}
}