У меня есть задача, которая должна выполняться в течение заданного промежутка времени (например, 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 я обновляю пользовательский интерфейс.Есть ли способ избавиться от обратного отсчета или Задержка задачи.Я думаю, что они делают то же самое, поэтому я подумал, как мне избавиться от одного.