работает, но мне понадобилось добавить в задачу, которая добавляется в очередь, таймер завершения по cancelletiontoken. Из-за него semaphore.WaitAsync перестал ожидать завершения выполнения предыдущей задачи.Как это возможно исправить?
Это как — перестал ожидать? Вроде всё ещё должен ждать.
До завершения первой задачи начинается вторая, с чем это связано пока не смог понять. Пытался передавать токен в WaitAsync и задавать таймер в самом добавлении в очередь, но тоже не помогло.
Не, туда не надо токен, это всё сломает!
Но где тут вообще очередь? Задачи все так же в случайном порядке могут выполняться
Асинхронное ожидание входа в семафор. Если кому-то не предоставлен доступ к Семафору, выполнение кода будет продолжено, иначе этот поток ждет здесь до тех пор, пока семафор не будет выпущен. При конструкторе максимальное число потоков равно одному, что каким-то образом можна конструировать как очередь. Я вообще искал класс для очереди задач и это единственный, который подходил под мои требования. Взял тут.
Очередь должна реализовать принцип FIFO (первый поступил - первым обработан), а ту де просто общий семафор, а последовательное выполнение таск не гарантируется
Из-за этого и были проблемы, протестировал уже в разных случаях и работает по тому как вы сказали, хотя за наводку спасибо, обязательно гляну
А вообще - если есть сильная необходимость - можно реализовать свой скедалер
Обсуждают сегодня