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
的更改,以返回任务
,以便等待它