TGViewer
C# (C Sharp) programming C# (C Sharp) programming @csharp_ci · 18.1K subscribers
Post #1600 4.71K
🔥 Хитрая .NET-задача

Дан код:


public class Fetcher
{
private readonly HttpClient _client = new HttpClient();

public async Task<string> DownloadAsync(string url)
{
await Task.Delay(10);
return await _client.GetStringAsync(url);
}
}

public async Task RunAsync()
{
var fetcher = new Fetcher();
var tasks = Enumerable.Range(0, 5)
.Select(_ => fetcher.DownloadAsync("https://example.com"))
.ToList();

await Task.WhenAll(tasks);

Console.WriteLine("Done");
}


Вопросы:

1) Код может «подвиснуть» или упасть в продакшене.
Какие два скрытых дефекта здесь спрятаны?

2) Как их исправить без изменения сигнатур методов?

3) Почему HttpClient здесь одновременно правильно и неправильно?

4) Что произойдет, если:

заменить HttpClient на HttpClientFactory;

- убрать Task.Delay(10)?

5) Как переписать класс так, чтобы он был:

- потокобезопасным
- быстрым
- без скрытных deadlock-сценариев
- и выдерживал сотни запросов в секунду?

Требования:

- нельзя менять логику RunAsync
- нельзя кэшировать результат
- код должен оставаться асинхронным
More from @csharp_ci
  1. Oct 3, 2026Post #1892
  2. Oct 2, 2026Post #1891
  3. Sep 29, 2026🖥 C# снова показывает, что «удобный язык = медленный язык» давно не работает. Автор ttfx…
  4. Sep 29, 2026🌦️ Красивый пример того, как может выглядеть современное приложение на Aspire Команда пок…
  5. Sep 27, 2026⚡ .NET 11 ускорили почти везде - от JIT и GC до LINQ и networking Stephen Toub выпустил ог…
  6. Sep 23, 2026🐞 Когда логов недостаточно: дамп памяти из C# Баг возникает только на проде, а локально в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →