Информация об изменениях

Сообщение Re[6]: .net core и async lock от 06.04.2021 19:16

Изменено 06.04.2021 19:17 vdimas

Re[6]: .net core и async lock
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Методы расширения к чему?

V>>К типу SemaphoreSlim.
НС>Это приведет к тому, что использование окажется завязанным на семафор, и легко подменить ее, к примеру, на распределенный лок уже не получится.

Так и могут потребоваться разные реализации.
Например, SemaphoreSlim подходит когда требуется комбинировать синхронную и асинхронную блокировку.
Правда, без контроля ID потока это может привести к дедлоку, т.к. мьютекс на семафоре(1) нерекурсивный, поэтому, SemaphoreSlim стоит переписать на некий его аналог-мьютекс при необходимости такого комбинирования. Ну и, избавиться от прокси-Task-ов в реализации внутренней очереди, бо это какой-то позор по нынешним временам.

А распределенные блокировки или исключительно асинхронные — это малость другие сценарии.
Их все можно обыграть идентичными методами-расширениями, от которых треубется лишь вернуть IDisposable гарды для using.
(в последних версиях эти гарды могут быть даже value-типами, если не ошибаюсь)
Re[6]: .net core и async lock
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Методы расширения к чему?

V>>К типу SemaphoreSlim.
НС>Это приведет к тому, что использование окажется завязанным на семафор, и легко подменить ее, к примеру, на распределенный лок уже не получится.

Так и могут потребоваться разные реализации.
Например, SemaphoreSlim подходит когда требуется комбинировать синхронную и асинхронную блокировку.
Правда, без контроля ID потока это может привести к дедлоку, т.к. мьютекс на семафоре(1) нерекурсивный, поэтому, SemaphoreSlim стоит переписать на некий его аналог-мьютекс при необходимости такого комбинирования. Ну и, избавиться от прокси-Task-ов в реализации внутренней очереди, бо это какой-то позор по нынешним временам.

А распределенные блокировки или исключительно асинхронные — это малость другие сценарии.
Их все можно обыграть идентичными методами-расширениями, от которых требуется лишь вернуть IDisposable гарды для using.
(в последних версиях эти гарды могут быть даже value-типами, если не ошибаюсь)