Первая готовая задача WhenAny в C#
Метод WhenAny полезен, когда достаточно первого успешного ответа: резервный канал, кэш на узле, повтор запроса. Остальные задачи могут ещё выполняться, но результат победителя уже доступен.
Важно не путать с отменой проигравших: WhenAny лишь сообщает, какая задача завершилась раньше. Дальнейшая обработка зависит от вашей логики.
Сравним быстрый ответ кэша и медленный ответ хранилища. Медленная задача при этом может ещё работать:
static Task<string> EdgeCacheLookup() =>
Task.Run(() =>
{
Thread.Sleep(40);
return "edge";
});
static Task<string> OriginDatabaseLookup() =>
Task.Run(() =>
{
Thread.Sleep(300);
return "origin";
});
Task<string> finished = await Task.WhenAny(EdgeCacheLookup(), OriginDatabaseLookup());
Console.WriteLine(await finished); // выведет "edge"
Запросите два склада: ближний возвращает "near", дальний - "far". Выведите метку склада, который ответил раньше.