Start Debugging

Тег: csharp

199 статей · Страница6из20

lock vs Monitor vs SemaphoreSlim vs System.Threading.Lock в C#
Четыре способа защитить критическую секцию в C# и матрица решений для выбора одного из них. Используйте System.Threading.Lock для синхронной взаимной блокировки на .NET 9+, SemaphoreSlim когда секция охватывает await, и Monitor только когда нужны Wait/Pulse.
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 выигрывает по обработке исключений, композиции и тестируемости.
Исправление: ломающее изменение разрешения перегрузок в C# 14 со Span и ReadOnlySpan
После обновления до C# 14 / .NET 10 вызовы вроде array.Contains, x.Reverse() и MemoryMarshal.Cast внезапно привязываются к другим перегрузкам или перестают компилироваться. Вот что изменилось и как зафиксировать старое поведение там, где это важно.
Назад Вперёд