是否有可能使对象构造异步?
本文关键字:异步 对象 有可能 是否 | 更新日期: 2023-09-27 18:07:13
我有一个从我的webservice检索信息的async
函数
private static async Task<DataClass> retrievData(){
...
}
我需要这个信息在我的构造函数,但我不能阻止我的应用程序的其余部分
所以我想写成
public class MyClass {
private DataClass theData;
public async Myclass(){
var dataTemp = await Server.retrievData();
if(dataTemp.ValidatorNumber == Server.Validator.FULL)
theData = dataTemp
...
}
,但这是不允许的。有解决这个问题的方法吗?
不能创建一个构造函数async
。但是,您可以创建一个async
工厂方法:
public class MyClass {
private DataClass theData;
private Myclass(DataClass theData) {
this.theData = theData;
}
public static async MyClass Create() {
var dataTemp = await Server.retrievData();
if(dataTemp.ValidatorNumber == Server.Validator.FULL)
return new DataClass(dataTemp);
... // Deal with the error here
}
}
现在调用者将有一种方法异步创建MyClass
的实例,如下所示:
var c = await MyClass.Create().ConfigureAwait(false);