У меня есть StatefulService
, который в методе RunAsync()
создает некоторые задачи (используя Task.Run()
), но не ожидает их.
У меня странная проблема: когда я пытаюсь вручную удалить службу в кластере, и я нахожусь в режиме отладки в VS, значение токена отмены не устанавливается в значение true, и RunAsync () продолжает выполняться. Затем, получая следующее предупреждение в интерфейсе кластера:
The api ireplicator.changerole(n) on node is stuck
Да, он застрял, но только потому, что SF не отправил запрос на отмену.
Теперь самое странное, что это происходит время от времени, и я не могу отследить причину этого.
И, как вы можете видеть, я читаю маркер отмены, так как я отлаживаю RunAsync()
, и он не зависает, он просто не получил запрос на отмену.
Есть идеи?
Возможно ли, что задачи, которые я создаю, вызывают это? Я не вижу, как, хотя, если я удаляю эти задачи, похоже, что он работает, как ожидалось.
Даже если задачи блокируются, RunAsync()
не ждет их и должен быть отменен, но это не так.
Спасибо.
protected override async Task RunAsync(CancellationToken cancellationToken)
{
StateManagerHolder.Instance = StateManager;
while (true)
{
Task.Run(() => DoSomething(), cancellationToken);
await Task.Delay(45, cancellationToken);
}
}