Я пытаюсь реализовать функцию отмены задач в сервисах с отслеживанием состояния.
План использует токен отмены для распространения уведомлений на связанные потоки / задачи.
Проблема в том, что пока есть эти долго выполняющиеся задачи и потоки, ожидающие этого сигнала, я не уверен, как мне найти правильные токены отмены на основе других вызовов веб-API.
Я думал об использовании надежного словаря, но даже до того, как попробовать его, я предполагаю, что это приведет к потере, потому что cancellationToken не может быть сериализован / десериализован.
Пожалуйста, помогите мне найти хорошее решение этой проблемы.
Обновление (я не хотел создавать новую цепочку, теряющую некоторые важные контексты, упомянутые в этой ветке, поэтому обновляю в этом сообщении.)
Подтверждено, что в описании ссылки ниже показано, что методы надежной службы и субъекта могут поддерживать токен отмены. Однако типичный вариант использования - получение запроса на отмену напрямую через веб-API с запуском пользователя, например, обновление щелчка, переход на другую страницу и т. Д. В таком сценарии точно такая же конечная точка должна получить запрос, в то время как предыдущий HTTP-запрос задерживается с некоторыми долго выполняющаяся задача или зависла. Это не сценарий в этой теме.
Поддержка CancellationToken для IService / IActor
Методы Reliable Service и Reliable Actor теперь поддерживают токен отмены, который может быть удален через ActorProxy и ServiceProxy, что позволяет реализовать совместную отмену. Клиенты, которые хотят отменить длительную службу или метод участника, могут сигнализировать токен отмены, и это намерение отмены будет передано методу субъекта / службы. Затем этот метод может определить, когда остановить выполнение, просмотрев состояние аргумента токена отмены.
Например, контракт актера, имеющий, возможно, долгосрочный метод, можно смоделировать, как показано ниже:
public interface IPrimeNumberActorInterface : IActor
{
Task<ulong> FindNextPrimeNumberAsync
(ulong previous, CancellationToken cancellationToken);
}
Клиентский код, желающий отменить выполнение метода, может сообщить о своем намерении, отменив токен отмены.