SemaphoreSlim(1, 1) WaitAsync 2 -- пару вопросов.
От: Sharov Россия  
Дата: 29.12.20 21:27
Оценка:
Здравствуйте.

Поигрался с примером из предыдущего вопроса
Автор: #John
Дата: 28.12.20
.

1) Почему balance не будет биться ( != 0), если в коде Add\Remove заменить Task на void?
Использую корректную версия кода, где вместо Factory использую Task.Run.
static async void Add()
       {
           await s.WaitAsync();//.WaitAsync();
           try
           {
               _balance++;
               await Task.Yield();
           }
           finally
           {
               s.Release();
           }
       }



async void -- какая-то инфернальная конструкция.

2)Почему SemaphoreSlim не бросает исключение, ведь захватить его может один поток, а освободить другой(continuation)?
Бегло посмотрел по исходникам, не похоже, чтобы runtime c контекстами возился и т.п.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.