Задержка задания с таймером обратного отсчета - PullRequest
0 голосов
/ 03 июля 2019

У меня есть задача, которая должна выполняться в течение заданного промежутка времени (например, 10 секунд), пока я ожидаю завершения Task.Delay. Я хочу отсчет времени и отображение времени в пользовательском интерфейсе.Поэтому я написал следующий код:

public async Task Play(CancellationToken cancel)
{
    if (State == PlaybackState.Playing)
        return;

    if (RemainingAirTime == null)
        RemainingAirTime = ETimeSpan.FromSeconds(Display.Settings.ScrollTime);

    if (cancel.IsCancellationRequested)
        return;

    _ct = new Countdown(RemainingAirTime.BaseSpan);
    _ct.Elapsed += _ct_Elapsed;
    _ct.Start();

    try {
        Draw();
    }catch(System.Exception ex) {
        Blenet.Exceptions.ExceptionHandler.HandleException(ex, "Error while drawing", this);
    }
    State = PlaybackState.Playing;
    await Task.Delay(RemainingAirTime.BaseSpan, cancel);
    if(State == PlaybackState.Playing)
        await Reset();
}

private void _ct_Elapsed(TimeSpan obj)
{
    if (State == PlaybackState.Playing)
        RemainingAirTime = new ETimeSpan(obj);
}

Как вы можете видеть, я начинаю обратный отсчет, прежде чем я жду Task.Delay.В методе _ct_Elapsed я обновляю пользовательский интерфейс.Есть ли способ избавиться от обратного отсчета или Задержка задачи.Я думаю, что они делают то же самое, поэтому я подумал, как мне избавиться от одного.

...