Semaphoreslim выставляет wait () и waitasync () . Почему они решили это сделать? Представьте, что я защищаю поля в классе. Этот класс обладает некоторыми свойствами (синхронными), как некоторые асинхронные методы.
Мы думаем, что этот вид класса-плохая идея по дизайну, как единственный способ защиты полей от доступа к нескольким темам, который мы хотим, чтобы мы могли защищать, и используют доступ к полету и используются поля. в том же положении, к которому обращаются из асинхровых методов. Тогда у нас будет тупик. Итак, нам было интересно, какова цель Semaphoreslim , придерживаясь синхронного метода ожидания для начала? /> Если программисту нужно защитить что -то вне асинхронного контекста, то он может просто использовать Semaphore.wait () < /code> (таким образом, не < /strong> semaphoreslim). < /p>
Разве это не супер путает /не опасно создать иллюзию, что «ОК». Псевдо -код < /p>
public class SomeClass
{
private readonly SemaphoreSlim _semaphore = new(initialCount: 1);
private List _someList = new();
public bool SomeProperty
{
get
{
// If this is called from "task2" scheduled on native thread "1".
// While "task1" is scheduled out while having the semaphore,
// and also executed on thread "1".
_semaphore.Wait();
try
{
return _someList.Any();
}
finally
{
_semaphore.Release();
}
}
}
public async Task AddToListAsync(object item)
{
await _semaphore.WaitAsync().ConfigureAwait(false);
try
{
_someList.Add(item);
// Allow to schedule out the current task
await Task.Delay(0).ConfigureAwait(false);
return true;
}
finally
{
_semaphore.Release();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... aphoreslim
Почему .net решил разоблачить оба .wait () и .waitasync () на Semaphoreslim ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему .net решил разоблачить оба .wait () и .waitasync () на Semaphoreslim
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-