Показать сообщение отдельно
Старый 07.02.2017, 07:24   #1
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
async / await / dispatcher

Помогите уяснить.

Есть такой код:
private bool DoSomething()
{
    if (
abc) return false;

    
Dispatcher.BeginInvoke(async () => { await MyMethodAsync(); });
    return 
true;

Вопрос 1- выполнится ли return true; сразу же, или будет ждать MyMethodAsync ?

Это не мой код, разбираюсь в чужом.
По моим соображениям, всё что внутри Dispatcher.BeginInvoke() выполнится "когда-то, не сразу, т.к. суть этого метода - асинхронное выполнение в ui потоке именно этого диспетчера".
И значит, return true; выполнится сразу же.
Из доки:
Dispatcher.BeginInvoke Method
 
Executes a delegate asynchronously on the thread the Dispatcher is associated with

Соответственно, вопрос 2 - есть ли смысл писать await внутри BeginInvoke, если далее нет кода, завязанного на окончание (результат) MyMethodAsync() ?

Вроде очевидно, но вдруг я чё-то не догоняю.
(Offline)
 
Ответить с цитированием