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