Служба фабрики состояний с сохранением состояния - токен отмены не установлен в значение true, когда служба удалена - PullRequest
0 голосов
/ 21 марта 2019

У меня есть 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);
        }
    }

1 Ответ

0 голосов
/ 24 марта 2019

Что ж, проблема, кажется, в одной из моих задач, которая хранит состояние с помощью IReliableDictionary, как будто я закомментирую это, оно работает как ожидалось.

Так как я не знаю, что яделать неправильно (делать простые транзакции, такие как документы), и в соответствии с: https://github.com/Azure/service-fabric-issues/issues/1139

Я решил преобразовать службу в состояние без состояния и использовать таблицу Azure.Конечно, я не испытываю этой проблемы сейчас!

...