Перед тем, как использоватьВызова функция асинхронная внутри функции, не асинхронной
protected async void OnResume() {
await DoWorkAsync(); // assume exception is appropriately handled
await DoOtherWorkAsync();
}
Но теперь я видел другие разработчики используют
protected void OnResume() {
SynchronizationContext.Current.Post(async (status) => {
await DoWorkAsync();
await DoOtherWorkAsync();}, null);
}
ли вторая один правильный и предпочтительный при вызове методов асинхронных внутри не-асинхронном методы? Заранее спасибо.
UPDATE: При использовании 2-й фрагмент кода, вы должны вызвать SynchronizationContext.Current.Post()
на UI тему, или вы получите NullReferenceException
, причиной SynchronizationContext.Current
является недействительным на не-UI Thread. _handler.Post(async() => {// do UI changes});
может быть вызван на тему, отличную от UI, для внесения любых изменений пользовательского интерфейса, при условии, что _handler
создан при создании пользовательского интерфейса.
Если Вы можете сделать свой метод асинхр - сделать это, как это общая лаковой в настоящее время. Если это может привести к некоторым неприятностям - вы можете использовать второе решение, так как оно правильно ничего плохого об этом – MajkeloDev
Спасибо @MajkeloDev –