gpt4 book ai didi

c# - 任务未等待完成且错误超时协议(protocol)错误 2504

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:20 25 4
gpt4 key购买 nike

我有一个带有这个构造函数的类:

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();
}

此代码在本地数据库中有效,但当我连接到远程计算机中的数据库时,出现超时错误和协议(protocol) 2504。

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

也许我错了,但我认为使用 await 代码等待方法完成,但在我的情况下,这不是行为,因为它继续构造函数中的下一行。

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

最佳答案

避免 async void 除了事件处理程序。

引用 Async/Await - Best Practices in Asynchronous Programming

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

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 的更改以返回一个 Task 以便等待它。

关于c# - 任务未等待完成且错误超时协议(protocol)错误 2504,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com