У меня есть требование обновить пользовательский интерфейс, когда изменится статус зависимой службы.У меня есть этот пример кода, который запрашивает API службы для получения статуса и отправляет результат для пересчета и обновления пользовательского интерфейса по основному потоку:
public void StartObserving() {
this.cts = new CancellationTokenSource();
this.cts.Token.ThrowIfCancellationRequested();
this.isRunning = true;
var token = this.cts.Token;
Task.Run(async () =>
{
try
{
while (this.isRunning)
{
var result = this.serviceAPI.GetStatus();
this.OnServiceStatusChanged(result);
await Task.Delay(3000);
}
}
catch (OperationCanceledException)
{
this.isRunning = false;
}
catch (Exception ex)
{
this.isRunning = false;
this.logger.LogError(ex);
}
}, token);
}
И проблема в том, когда я хочу отменить выше задачи.Когда я вызываю this.cts.Cancel () в другом методе этого класса, я получаю исключение «Задача была отменена» в диспетчере, которое было вызвано EventHandler: OnServiceStatusChanged
Как правильно реализовать этот сценарий?