В этом случае вы используете SemaphoreSlim
в качестве своего рода примитива "мьютекса" ("взаимное исключение").
Каждый мьютекс должен использоваться для защиты определенного c набора данные. Поэтому целесообразно использовать разные мьютексы для разных наборов данных. Как правило, мелкозернистые мьютексы лучше, чем крупнозернистые мьютексы.
Когда вы имеете дело с несколькими мьютексами, вы всегда должны убедиться, что они получены в одном и том же порядке. В вашем примере есть код, который содержит _semaphoreSlim
, затем вызывается код, который получает _semaphoreSlim2
. Это хорошо, но вы должны документировать это, потому что вы никогда не хотите, чтобы код, содержащий _semaphoreSlim2
, вызывал код, который получает _semaphoreSlim
. Это может привести к тупику.