public async void GetUserInfo()
{
try
{
using (SqlConnection conn =
new SqlConnection(ConfigurationManager.ConnectionStrings["Connect"].ConnectionString))
{
await conn.OpenAsync();
using (SqlCommand command =
new SqlCommand("SELECT * from XTable", conn));
{
using (SqlDataReader reader = await command.ExecuteReaderAsync())
{
if (await reader.ReadAsync())
Code_abc = reader.GetInt32(0);
reader.Close();
conn.Close();
}
}
}
Console.WriteLine("1");
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
和:
public XViewModel(int UserID)
{
GetUserInfo();
EmployeListBox = new[]
{
new EmployeListBoxItems(PackIconKind.UndoVariant, "Listing", new YWindow( new YViewModel(Code_abc)) ),
};
Console.WriteLine("3");
}
当我看到调试输出时
3
1
我不确定这是否与ASYNC有关,但根据调试输出,我正在创建表单和ViewModel,然后获取查询结果,因此基本上是{{1} }我正在发送的是0,而不是实际值。
如果我先打code_abc
,为什么会发生这种情况?
答案 0 :(得分:1)
因为您没有await
GetUserInfo()
,它会在将“ 1”打印到控制台之前返回。
为使您能够使用await
方法,应将其返回类型从void
更改为Task
:
public async Task GetUserInfo()
但是即使那样,您也无法从构造函数中像这样await
:
await GetUserInfo();
...
Console.WriteLine("3");
您不应从构造函数中调用async
方法。
如果您从标记为async
的方法中这样调用它,则应该在控制台中看到“ 1”打印在“ 3”之前:
public async Task SomeAsyncMethod (int UserID)
{
await GetUserInfo();
EmployeListBox = new[]
{
new EmployeListBoxItems(PackIconKind.UndoVariant, "Listing", new YWindow( new YViewModel(Code_abc)) ),
};
Console.WriteLine("3");
}