在我使用之前
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);
}
在非异步方法中调用异步方法时,第二个方法是否正确且首选?先感谢您。
更新:如果使用第二个代码段,则必须SynchronizationContext.Current.Post()
在UI线程上调用,否则将得到NullReferenceException
,原因SynchronizationContext.Current
是在非UI线程上为null。_handler.Post(async() => {// do UI changes});
可以在非UI线程上调用以进行任何UI更改,只要_handler
在UI Thread上实例化即可。
不,不要使用SynchronizationContext
。您已经在UI线程上,因此第二个选项确实没有任何意义。
请注意,通常async void
应避免使用。在这种情况下,我会说这是可以接受的,因为您实际上将其OnResume
视为事件处理程序:
protected async void OnResume()
{
await DoWorkAsync();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句