Обновление связанных значений асинхронно

1

У меня есть следующий асинхронный метод в проекте WPF:

private async void RecalculateRun(Guid run_number)
{
    // kick off the Full recalculation
    //
    await FullRecalcAsync(run_number);

    // When thats done, asyncronously kick off a refresh
    //
    Task RefreshTask = new Task(() => RefreshResults());
    await RefreshTask;      
}

Первое await выполняет нагрузку вычислений, а вторая берет результаты и обновляет некоторые связанные переменные. Я не ожидал, что пользовательский интерфейс будет обновляться во время второго await, но я ожидал, что он это сделает, когда он закончится. Конечно, этого не происходит. Кроме того, я хотел бы отметить, что если я позвоню RefreshTask синхронно после первого await, он отлично работает.

Теги:
wpf
async-await
asynchronous

1 ответ

3
Лучший ответ

Вы создаете задачу, не запуская ее. Вам нужно позвонить в Start:

Task RefreshTask = new Task(() => RefreshResults());
RefreshTask.Start();
await RefreshTask;

Или лучше использовать Task.Run

await Task.Run(() => RefreshResults());

Использование конструктора Task напрямую обычно не рекомендуется:

В общем, я всегда рекомендую использовать Task.Factory.StartNew если конкретная ситуация не дает веских оснований для использования конструктора, за которым следует Start. Есть несколько причин, по которым я рекомендую это. Во-первых, он обычно более эффективен

Из "Task.Factory.StartNew" и "новая задача (...). Начать"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню