asynchronous - 从 ViewModel 构造函数 Xamarin.Forms 调用异步方法

标签 asynchronous xamarin constructor xamarin.forms async-await

我无法从 a-z 中找到一个关于如何以安全的方式从构造函数调用异步方法的直接示例。以下是我想出的,但我不太了解这些概念,所以我不知道它是否真的正确。有人可以祝福这种格式吗?
创建 IAsyncInitialization 接口(interface):

/// <summary>
/// The result of the asynchronous initialization of this instance.
/// see http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html
/// </summary>
Task Initialization { get; }
然后在这个 ViewModel 上打接口(interface)...:
public GotoViewModel() // constructor
{
    Initialization = InitializeAsync();
}

public Task Initialization { get; private set; }
private async Task InitializeAsync()
{
    //call some async service and get data
}
从使用此 ViewModel 的代码隐藏 xaml.cs:
public partial class GotoPage : ContentPage, IAsyncInitialization
{
    IGotoViewModel VM;
    public GotoPage()
    {
         InitializeComponent();
         VM = App.Container.Resolve<IGotoViewModel>();
         Initialization = InitializeAsync();
     }

     public Task Initialization { get; private set; }

     private async Task InitializeAsync()
     {
          await VM.Initialization;
          this.BindingContext = VM;
     }
}
这段代码效果很好,但我知道这并不意味着什么。

最佳答案

自从我发布这个问题以来,在我的项目中已经有一年多的时间了,我一直没有使用任何 MVVM 框架,因为我无法忍受被绑定(bind)到可能与最新 Xamarin.Forms 冲突的框架。我最终从与行为相关的 xaml 出现的事件中调用了我的 View 模型中的异步初始化方法。

关于asynchronous - 从 ViewModel 构造函数 Xamarin.Forms 调用异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44057346/

相关文章:

Java NIO 非阻塞模式 vs node.js 异步操作

qt - 对一串 QML 使用 Loader

android - 将 Firebase Analytics 与 Xamarin Android 集成

java - 在 Java SE 6 中扩展类时出错

Java 线程 notify() 与 notifyAll()

c# - 将 `Task.WhenAll` 与 `INotifyCompletion` 一起使用

xamarin - Xamarin Forms 中的垂直页面动画转换?

azure - 用于 Azure AD B2C 和 Xamarin 的 MSAL 或 ADAL 库

c++ - 在命名空间中定义变量但在测试中得到空值

java - 如何在第一次调用 Singleton 期间仅更新一次 map ?