首页 > 解决方案 > 应用启动后调用异步方法的最佳模式是什么?(构造函数中的Fire&Forget?)

问题描述

在我的应用程序中,我想在我的应用程序启动后立即通过查询数据(来自异步方法)设置我的 ViewModel。
在我的情况下,我有一个 .NET Framework WPF 应用程序,并且在启动后我想开始通过异步方法加载数据。等待数据后,我想更新我的视图模型。

做到这一点的最佳方式和最佳切入点是什么?

我的第一种方法如下:

public App()
{
    // Do synchronous initializing stuff

    // Load data and initialize by viewmodel with it
#pragma warning disable CS4014
    ProgramStateViewModel.Instance.LoadDataAndSetupAsync();
#pragma warning restore CS4014
}

这个问题是我得到了编译器警告,我必须通过抑制它来处理它。实际上我想要一个即发即弃的调用,但我调用的方法是异步的并返回一个任务。如何做得更好?

标签: c#wpfasynchronousconstructorasync-await

解决方案


您可以附加异步Startup事件处理程序:

public App()
{
    Startup += async (s, e) =>
    {
        await ProgramStateViewModel.Instance.LoadDataAndSetupAsync();
    };
}

推荐阅读