Новый Тип Блокировки в .NET 9.
Продолжаем заглядывать в будущее. Новый тип System.Threading.Lock, представлен для .NET 9.
Предупреждение: тип Lock всё ещё находится в режиме предварительного просмотра. Вы можете загрузить текущую сборку .NET 9 и выбрать новый тип блокировки с помощью переключателя
<EnablePreviewFeatures>true</EnablePreviewFeatures>
в файле csproj. Тем не менее, в будущем в этом типе ещё могут произойти кардинальные изменения.
Новый тип блокировки имеет одну основную цель: быть блокировкой. Т.е. представляет собой блокировку и только блокировку. Нет никакой двусмысленности в том, что он делает. До сих пор мы сделали что-то вроде следующего:
object _obj = new();
void DoSomething()
{
lock (_obj)
{
// Что-то делаем
}
}
Новый тип Lock выражает это более явно:
Lock _lock = new();Использование его абсолютно такое же (на данный момент). Но новый тип явный и теоретически может быть быстрее. Это зависит от используемой базовой реализации. До сих пор конструкция lock { … } всегда заменялась на пару операторов Monitor.Enter/Monitor.Exit, но теперь это не обязательно будет так.
void DoSomething()
{
lock (_lock)
{
// Что-то делаем
}
}
Есть и другое предложение: "Паттерн оператора блокировки". Идея в том, чтобы иметь маркерный интерфейс ILockPattern, который «специально обрабатывается» компилятором и несколько новых типов блокировок. Например, следующий код:
class MyDataStructure
{
private Lock _lock = new();
void Foo()
{
lock (_lock)
{
// Что-то делаем
}
}
}
Будет преобразовано в:
class MyDataStructure
{
private Lock _lock = new();
void Foo()
{
using (_lock.EnterLockScope())
{
// Что-то делаем
}
}
}
Здесь _lock может быть любым типом блокировки, реализующим ILockPattern. EnterLockScope будет выдавать disposable контекст блокировки.
Источник: https://steven-giesel.com/blogPost/d7f923b3-13ff-4ecc-8b8f-d847ae581f68/a-new-lock-type-in-net-9