异步方法不调用
Async method not calling
调用 awaitMethod()
不会在 GetFilmCount()
中打印 console.printline
的第二次调用,也不会在 GetFilmCount()
中打印最后一个打印语句awaitMethod()
接到电话。
唯一的输出是第一次调用 GetFilmCount() 时的 Console.printLine()
。
我是不是做错了什么。无法弄清楚为什么它会这样??
public async void awaitMethod()
{
int count1 = await GetFilmCount(1);
int count2 = await GetFilmCount(2);
Console.WriteLine("Number of films {0}, {1} ", count1,count2 );
}
public async Task<int> GetFilmCount(int count)
{
Console.WriteLine("Count {0} ", count);
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand cmd = new MySqlCommand("select sleep(5) ; select count(*) from sakila.film", connection);
return await cmd.ExecuteScalarAsync().ContinueWith(t => {
return Convert.ToInt32(t.Result);
});
}
}
你不应该使用 async void
除非它是一个 UI 事件处理程序(似乎并非如此)。
这里可能发生的是你没有等待 awaitMethod
完成(你不能,因为它是一个 void
方法)所以你的控制台应用程序在你的其余部分之前结束代码有机会执行。
使用 async Task
和 await
(如果它在 Main
中则调用 Wait()
)返回的 Task
:
public async Task awaitMethod()
{
int count1 = await GetFilmCount(1);
int count2 = await GetFilmCount(2);
Console.WriteLine("Number of films {0}, {1} ", count1,count2 );
}
调用 awaitMethod()
不会在 GetFilmCount()
中打印 console.printline
的第二次调用,也不会在 GetFilmCount()
中打印最后一个打印语句awaitMethod()
接到电话。
唯一的输出是第一次调用 GetFilmCount() 时的 Console.printLine()
。
我是不是做错了什么。无法弄清楚为什么它会这样??
public async void awaitMethod()
{
int count1 = await GetFilmCount(1);
int count2 = await GetFilmCount(2);
Console.WriteLine("Number of films {0}, {1} ", count1,count2 );
}
public async Task<int> GetFilmCount(int count)
{
Console.WriteLine("Count {0} ", count);
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand cmd = new MySqlCommand("select sleep(5) ; select count(*) from sakila.film", connection);
return await cmd.ExecuteScalarAsync().ContinueWith(t => {
return Convert.ToInt32(t.Result);
});
}
}
你不应该使用 async void
除非它是一个 UI 事件处理程序(似乎并非如此)。
这里可能发生的是你没有等待 awaitMethod
完成(你不能,因为它是一个 void
方法)所以你的控制台应用程序在你的其余部分之前结束代码有机会执行。
使用 async Task
和 await
(如果它在 Main
中则调用 Wait()
)返回的 Task
:
public async Task awaitMethod()
{
int count1 = await GetFilmCount(1);
int count2 = await GetFilmCount(2);
Console.WriteLine("Number of films {0}, {1} ", count1,count2 );
}