C# 任务不是';t等待完成,错误超时协议错误2504

C# 任务不是';t等待完成,错误超时协议错误2504,c#,asynchronous,task,C#,Asynchronous,Task,我有一个具有此构造函数的类: MyType01 _myData01; MyType02 _myData02; MyType03 _myData03; public MyClass() { getDataFromDataBase(); //Code that use the data from database. string myText = _myData02.Property1; //error because my data02 is null. } p

我有一个具有此构造函数的类:

MyType01 _myData01;
MyType02 _myData02;
MyType03 _myData03;


public MyClass()
{
    getDataFromDataBase();


    //Code that use the data from database.
    string myText = _myData02.Property1; //error because my data02 is null.
}


private async void getDataFromDataBase()
{
    await myMethod01Async();
    await myMethod02Async();
    await myMethod03Async();
}
这段代码在本地数据库中工作,但当我连接到远程计算机中的数据库时,会出现超时和协议2504错误

如果我进行调试,我会注意到,如果我在运行
myMethod01Asyc()
的行中设置一个断点并按“F5”,那么下一行代码就是构造函数中的下一行,它尝试使用
\u myData02
变量中的数据,但它仍然是空的,因为它没有完成方法
getMyData02Async()

也许我错了,但是我认为使用wait等待代码直到方法完成,但在我的例子中,这不是行为,因为它会在构造函数中的下一行继续


那么,我如何在构造函数中等待,直到
getDataFromDataBase()
完成,才能使用我需要的数据呢?

除了事件处理程序之外,避免
async void

参考文献

我建议您创建一个事件处理程序,并在那里等待您的任务

MyType01 _myData01;
MyType02 _myData02;
MyType03 _myData03;

public MyClass() {
    //subscribe to event
    LoadingData += OnLoadingData;
    //raise event
    LoadingData(this, EventArgs.Empty);
}

private event EventHandler LoadingData = delegate { };

private async void OnLoadingData(object sender, EventArgs args) {
    await getDataFromDataBase();
    //Code that use the data from database.
    string myText = _myData02.Property1; 
}

private async Task getDataFromDataBase() {
    await myMethod01Async();
    await myMethod02Async();
    await myMethod03Async();
}
请注意
getDataFromDataBase
的更改,以返回
任务
,以便等待它