如何在类构造函数中等待异步操作? [复制]

Posted

技术标签:

【中文标题】如何在类构造函数中等待异步操作? [复制]【英文标题】:How to wait async operation within class constructor? [duplicate] 【发布时间】:2014-07-19 23:10:43 【问题描述】:

我有一个类的构造函数:

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

                                );
                        );                 
            );
    

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

这是一个 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();

    

怎么办?

【问题讨论】:

【参考方案1】:

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

但是 LoadSignals 必须返回任务,否则你不能等待它......

【讨论】:

它不会解决我的问题,因为在构造函数之外不可能使 fetchMoreDataCommand = new DelegateCommand(...) 。 =( 那么你必须检查命令内部是否加载信号已经完成并在必要时等待它......

以上是关于如何在类构造函数中等待异步操作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Lambda 函数等待异步操作完成?

构造函数中的异步操作

如何在 AWS Lambda 中等待异步操作?

构造函数中的异步操作

如何等待异步函数的结果? [复制]

如果我不等待它,是不是保证从 Mvc.Controller 操作方法调用的异步方法完成? [复制]