是否可以使对象构造异步?

Umo*_*uga 2 c# async-await

我有一个async从我的webservice检索信息的功能

private static async Task<DataClass> retrievData(){
...
}
Run Code Online (Sandbox Code Playgroud)

我需要在我的构造函数上提供此信息,但我无法阻止我的应用程序的其余部分

所以我想做点什么

public class MyClass {
     private DataClass theData;
     public async Myclass(){
          var dataTemp = await Server.retrievData();
          if(dataTemp.ValidatorNumber == Server.Validator.FULL)
              theData = dataTemp
          ...
     }
Run Code Online (Sandbox Code Playgroud)

但这是不允许的.有解决办法吗?

das*_*ght 7

你不能创建一个构造函数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
    }
}
Run Code Online (Sandbox Code Playgroud)

现在调用者将有办法MyClass异步创建实例,如下所示:

var c = await MyClass.Create().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)