是否有可能使对象构造异步?

本文关键字:异步 对象 有可能 是否 | 更新日期: 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);