Сообщение от Жека
Есть такой код:
private bool DoSomething() { if (abc) return false; Dispatcher.BeginInvoke(async () => { await MyMethodAsync(); }); return true; }
Вопрос 1- выполнится ли return true; сразу же, или будет ждать MyMethodAsync ?
|
Выполнится сразу. Метод просто кладет лямбду в очередь диспетчеру.
Сообщение от Жека
Соответственно, вопрос 2 - есть ли смысл писать await внутри BeginInvoke, если далее нет кода, завязанного на окончание (результат) MyMethodAsync() ?
|
Смысл отсутствует.
Сообщение от RegIon
И вообще смысла нету async/await в диспатчере. Это запуск нового потока из потока диспатчера, при этом диспатчер запущен из другого потока, что бы вызвать метод в UI-потоке. Бред.
|
Так же присоединюсь к тем, кто сказал про трединг. await имеет fast'path-ы в некоторых кейсах и может выполняться синхронно, и да, ситуация с тредингом очень зависит от реализации метода, который ожидают.
Попробуйте доказать спавн нового треда при ожидании такого метода:
private Task<bool> SpawnNewThreadAsync()
{
return Task.FromResult(true);
}