在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/