我刚开始在我的C#代码中使用async
和await
。我刚刚发现自己写了一个类似于以下的函数......
class Database
{
DatabaseConnection connection;
async void Close()
{
await connection.CloseAsync();
}
}
但是,我的Close
方法与使用以下方法相同......
void Close()
{
connection.Close();
}
或者异步版本是否有根本改进使其更好?
答案 0 :(得分:1)
当然他们不一样!
您的推理可能是因为该方法没有返回任何内容,因此您无需等待它完成。
但事实是,每个非异步方法都是同步的,无论它是否返回值。
例如,
connection.Close();
Console.WriteLine("Closed");
Close
是同步的。只有在结束时才会打印“已关闭”。但是,如果您在此处使用CloseAsync
,则“Closed”将在到达await
中的CloseAsync
语句后立即打印,并且关闭操作将开始异步运行。这意味着当打印“关闭”时,关闭操作可能尚未完成。
此外,如果您使用的是GUI,则在主线程上调用Close
将导致UI冻结,因为它是同步的。无论它是否返回值,操作仍需要时间,对吗?
现在看到差异?