c# - 我应该使用 c# mongodb 驱动程序的同步方法还是异步方法?

标签 c# mongodb async-await

在c# mongodb driver中,同步和异步两种方法都可用,如下所示?

_mongoCollection.InsertOneAsync(entity);
_mongoCollection.Insert(entity);

我相信,在大多数情况下,数据访问层中异步完成的工作量非常少。所以我正在等待数据库调用,如下所示:

await _mongoCollection.InsertOneAsync(entity);
await _mongoCollection.DeleteOneAsync(query);
await _mongoCollection.Find(query).ToListAsync();

现在我的问题是:由于我正在立即等待数据库调用,所以我在这里没有看到任何异步方法的使用。那么,我应该使用异步方法吗? (或)我应该使用同步方法吗?

最佳答案

我认为之前的答案遗漏了一个主要的异步点;也就是说,当您使用异步方法**时,您可以在(大部分)I/O 操作完成时释放您所在的线程,并且它可以在您的应用程序的其他地方使用;例如服务其他请求。

假设 Mongo 数据库在另一台服务器上。即使使用快速网络和快速 Mongo 实例,每个命令仍然可能需要 5 毫秒,这在 2GHz CPU 上是 1000 万个时钟周期。虽然您不会让所有这些都用于运行您的代码,但由于各种开销,您仍然可以获得优势如果您有一个可以高效使用额外线程的应用程序。

因此,如果您的应用是网站、API 或 UI,我会使用异步方法。如果它是单线程控制台应用程序,您可能不会获得上述任何好处。

--

** 这假设 Mongo 异步方法是真正异步的,而不仅仅是同步方法的包装器。

关于c# - 我应该使用 c# mongodb 驱动程序的同步方法还是异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41675434/

相关文章:

c# - 通用对象比较 diff 例程

c# - 如何将应用程序命令绑定(bind)到 View 模型(WPF)?

node.js - 不同类型帖子/文章的 Mongodb 模式

node.js - 无法让 AWS lambda 等待异步请求调用完成

javascript - 尝试从不同的函数中使用 Async 和 Await

c# - 如何在 c# WPF 框架中禁用导航快捷方式

mongodb - 在 Mongodb 中如何给出两个不同的 $match

Mac OSX Mavericks 升级后 PHP 和 Mongo 损坏

c# - 从使用 Task.WhenAll() 等待的任务分配时避免检查条件两次

c# - 如何使用来自另一个类 C# 的表单上的项目