【问题标题】: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();

    }

怎么办?

【问题讨论】:

    标签: c# asynchronous


    【解决方案1】:

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

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

    【讨论】:

    • 它不会解决我的问题,因为在构造函数之外不可能使 fetchMoreDataCommand = new DelegateCommand(...) 。 =(
    • 那么你必须检查命令内部是否加载信号已经完成并在必要时等待它......
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多