【问题标题】:Task.ConfigureAwait(false) in Xamarin - safe to use / recommended to use?Xamarin 中的 Task.ConfigureAwait(false) - 安全使用/推荐使用?
【发布时间】:2014-02-15 22:30:16
【问题描述】:

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

如果我有一个接受接口IUIAccess 的 PCL 核心库怎么办。 核心库中的视图模型则有一个方法:

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

IUIAccess 在 iOS 上会显示 UIAlertView

我现在的假设是:如果我从 UIViewController 调用 ViewModelLoginAsync,我不应该将 await 配置为 FALSE。它显然是 UI 代码。 但是对ServiceLoginAsync 的调用可以使用configure await false。它是否正确? 由于性能、内存使用等原因,它只是一种好的做法还是真的被推荐?

【问题讨论】:

    标签: c# xamarin async-await


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2019-12-06
      • 1970-01-01
      • 2014-12-01
      • 2017-07-15
      • 1970-01-01
      • 2022-08-03
      • 2019-08-31
      • 2021-10-06
      相关资源
      最近更新 更多