Xamarin中的Task.ConfigureAwait(false) - 安全使用/建议使用?

Kru*_*lur 4 c# async-await xamarin

经验法则说:如果它不是与UI相关的方法,请使用Task.ConfigureAwait(false).

如果我有接受一个接口PCL核心库IUIAccess.然后核心库中的视图模型有一个方法:

public Task ViewModelLoginAsync()
{
  bool success = await loginService.ServiceLoginAsync();
  if(!success)
  {
    uiAccess.ShowInfoDialog("Login failed.");
  }
}
Run Code Online (Sandbox Code Playgroud)

IUIAccessUIAlertView在iOS上显示一个.

我的假设现在是:如果我打电话ViewModelLoginAsync给我,UIViewController我不应该配置为等于FALSE.它显然是UI代码.但是,调用ServiceLoginAsync可以使用configure await false.它是否正确?由于性能,内存使用情况,这只是好的做法还是真的推荐......?

Ste*_*ary 6

首先,我建议(尽可能)不要从VM调用视图.我更喜欢使用数据绑定或某种消息总线.

这就是说,你不会用ConfigureAwait(false)ViewModelLoginAsync,因为它需要恢复在UI方面(如果你通过数据绑定,而不是显式调用的更新,这也是如此).但是ServiceLoginAsync应该使用ConfigureAwait(false)我在MSDN文章中描述的原因(主要是性能).