如何在类构造函数中等待异步操作? [复制]
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(...) 。 =( 那么你必须检查命令内部是否加载信号已经完成并在必要时等待它......以上是关于如何在类构造函数中等待异步操作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章