У меня есть класс с этим конструктором:
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», следующая строка кода будет следующей строкой в конструкторе, который пытается использовать данные в переменной _myData02
, но она по-прежнему равна нулю, поскольку не завершена, метод getMyData02Async()
.
Возможно, я ошибаюсь, но я подумал, что использование await кода ждет, пока метод не будет завершен, но в моем случае это не поведение, потому что оно продолжается со следующей строки в конструкторе.
Так как же мне ждать в конструкторе, пока getDataFromDataBase()
не закончится, чтобы использовать нужные мне данные?