Re[3]: SemaphoreSlim(1, 1) WaitAsync
От: gabryael  
Дата: 28.12.20 16:22
Оценка: 10 (1) +1
Здравствуйте, #John, Вы писали:

J>Здравствуйте, gabryael, Вы писали:


G>>
G>>tasks.Add(await Task.Factory.StartNew(add));
G>>


J>Такой вариант не подходит, т.к. новые таски будут создаваться и завершаться последовательно.


Это не так.

G>>или

G>>
G>>tasks.Add(Task.Factory.StartNew(add).Unwrap());
G>>


J>Так не работает.


Работает.

G>>или просто

G>>
G>>tasks.Add(Task.Run(add));
G>>


J>Так работает. Почему в случаи `tasks.Add(Task.Factory.StartNew())` SemaphoreSlim(1,1) WaitAsync не работает как lock?


SemaphoreSlim работает как должен. Просто ты ожидаешь не те таски. Task.Factory.StartNew(...) возвращает Task<Task> для асинхронных делегатов, поэтому нужен еще один await или Unwrap(). Подробнее
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.