在c#mongodb驱动程序中,有同步和异步方法,如下所示?
_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异步方法是真正的异步方法,而不仅仅是同步方法的包装器。