Почему .net решил разоблачить оба .wait () и .waitasync () на SemaphoreslimC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему .net решил разоблачить оба .wait () и .waitasync () на Semaphoreslim

Сообщение Anonymous »

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему .net решил разоблачить оба .wait () и .waitasync () на Semaphoreslim
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Async await блокирует выполнение даже с помощью Task.WaitAsync
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Async await блокирует выполнение даже с помощью Task.WaitAsync
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Необходимо понять использование SemaphoreSlim.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • SemaphoreSlim против оптимистической блокировки с помощью токена параллелизма: лучший подход для веб-приложений на C# и
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»