Start Debugging

Тег: async

14 статей · Страница1из2

2026-06-20 csharpdotnetasync
Что такое ValueTask<T> и когда он того стоит?
ValueTask и ValueTask<T> -- это структуры, которые позволяют асинхронному методу вернуть результат без выделения Task в куче, когда он завершается синхронно. Выигрыш -- одно выделение памяти меньше на горячих путях, которые обычно завершаются без ожидания. Цена -- строгий контракт ожидания ровно один раз. Вот что этот тип представляет собой на самом деле, как он работает и тот узкий набор случаев, где он оправдывает себя.
Что такое IAsyncEnumerable<T> и когда его следует использовать?
IAsyncEnumerable<T> — это интерфейс для асинхронных потоков: последовательность, элементы которой поступают со временем и каждый из которых может потребовать await. Вот что это на самом деле, как await foreach и yield приводят его в движение, и правило, когда выбирать его вместо Task<List<T>>.
Как безопасно выполнять fire-and-forget работу в ASP.NET Core с помощью BackgroundService
Вызов Task.Run из контроллера теряет работу при остановке, проглатывает исключения и захватывает уже освобождённые scoped-сервисы. Безопасный паттерн - ограниченная очередь Channel, которую опустошает BackgroundService, открывая новый scope для каждой единицы работы и завершая выполняемую работу в StopAsync.
Parallel.ForEach vs Parallel.ForEachAsync vs Task.WhenAll в C#
Используйте Parallel.ForEach для нагружающей CPU работы над данными в памяти, Parallel.ForEachAsync для асинхронного ввода-вывода над множеством элементов с ограничением параллелизма, и Task.WhenAll для небольшого фиксированного fan-out, где нужно запустить все операции сразу и получить результаты.
ConfigureAwait(false) vs значение по умолчанию в .NET 11: имеет ли это ещё значение?
ConfigureAwait(false) по-прежнему обязателен в библиотечном коде, который может выполняться под SynchronizationContext (WinForms, WPF, MAUI). В коде приложения на ASP.NET Core, консольном приложении или worker-сервисе, работающих на .NET 11, это no-op.
IEnumerable vs IAsyncEnumerable vs IQueryable в C#: что должен возвращать метод?
Три интерфейса последовательностей, три модели выполнения. Используйте IQueryable, когда база данных может транслировать запрос, IAsyncEnumerable, когда производитель асинхронный и вам нужна потоковая передача, IEnumerable для всего остального в памяти.
async void vs async Task в C#: когда какой вариант правильный
async Task - значение по умолчанию, а async void - исключение. Используйте async void только для обработчиков событий, обработчиков верхнего уровня в цикле сообщений и небольшого набора колбэков фреймворка, которые требуют сигнатуры void. Везде остальном async Task выигрывает по обработке исключений, композиции и тестируемости.
Вперёд