经验法则是:如果它不是与 UI 相关的方法,请使用Task.ConfigureAwait(false)
.
如果我有一个接受接口的 PCL 核心库怎么办IUIAccess
。
核心库中的视图模型有一个方法:
public Task ViewModelLoginAsync()
{
bool success = await loginService.ServiceLoginAsync();
if(!success)
{
uiAccess.ShowInfoDialog("Login failed.");
}
}
IUIAccess
会显示一个UIAlertView
在 iOS 上。
我现在的假设是:如果我打电话ViewModelLoginAsync
从我的UIViewController
我不应该将await 配置为FALSE。这显然是 UI 代码。
然而,调用ServiceLoginAsync
可以使用configure wait false。它是否正确?
这只是一个好的实践还是因为性能、内存使用等原因而真正推荐?
首先,我推荐(尽可能)not从虚拟机调用到视图中。我更喜欢使用数据绑定或某种消息总线。
也就是说,你不会使用ConfigureAwait(false)
in ViewModelLoginAsync
,因为它需要在 UI 上下文上恢复(如果您通过数据绑定而不是显式调用进行更新,这也是如此)。然而ServiceLoginAsync
应该使用ConfigureAwait(false)
由于我在我的文章中描述的原因MSDN 文章 http://msdn.microsoft.com/en-us/magazine/jj991977.aspx(主要是性能)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)