如何在类构造函数内等待异步操作

本文关键字:等待 异步操作 构造函数 | 更新日期: 2023-09-27 18:06:06

我有一个类构造函数:

public AllSignalsViewModel()
    {
        LoadSignals();
        fetchMoreDataCommand = new DelegateCommand(
            obj =>
                {
                    if (busy)
                    {
                        return;
                    }
                    Busy = true;
                    ThreadPool.QueueUserWorkItem(
                        delegate
                        {
                            Deployment.Current.Dispatcher.BeginInvoke(
                                delegate 
                                {
                                    AddMoreItems();
                                    Busy = false;
                                });
                        });                 
            });
    }

LoadSignals()是一个异步函数,但我需要让它在运行以下代码之前结束。但我不能等待它,因为我不能将构造函数设置为async。我该怎么办?

下面是一个LoadSignals()函数:

private async void LoadSignals()
    {
        var xmlDocument = new XmlDataSource();
        var sigCol = new SignalCollection(xmlDocument);
        var region = GetRegionInSettingsStorage();
        var allSignals = await sigCol.LoadSignals(isVotes(), false, region);
        signalSchema = allSignals;
        AddMoreItems();
    }

该怎么办?

如何在类构造函数内等待异步操作

我建议实现InitializeAsync方法,该方法可以在后面的代码中调用(甚至可以在没有await的构造函数中调用)。

但是LoadSignals必须返回task否则你不能等待它