Каково различие между InvokeAsync и BeginInvoke для Диспетчера WPF

Я заметил в.NET 4.5, что Диспетчер WPF заставил новый набор методов выполнять материал на потоке Диспетчера под названием InvokeAsync. Прежде.NET 4.5, который мы имели, Вызывает и BeginInvoke, который обработал это синхронно и асинхронно соответственно.

Помимо именования и немного отличающихся доступных перегрузок, там любые существенные различия между BeginInvoke и InvokeAsync методы?

О, и я уже проверил, оба могут быть awaitредактор:

private async Task RunStuffOnUiThread(Action action)
{
    // both of these works fine
    await dispatcher.BeginInvoke(action);
    await dispatcher.InvokeAsync(action);
}

61
задан 16 November 2012 в 12:08

1 ответ

Ну, одно различие, которое я заметил, - то, что InvokeAsync имеет универсальную перегрузку, которая возвращает DispatcherOperation как возвращаемое значение и принимает Func как его входной параметр делегата. Таким образом можно получить результат операции через InvokeAsync безопасным с точки зрения типов способом, аналогичным тому, как можно ждать результата Задачи.

2
ответ дан 31 October 2019 в 16:14

Другие вопросы по тегам:

Похожие вопросы: