有没有办法同步使用MongoDB C#驱动程序

fat*_*han 4 .net c# mongodb async-await mongodb-.net-driver

我有一个2层的C#项目.第一个是连接到mongodb并将集合发送到Web服务层的数据层.问题是我在新的驱动程序中找不到非async方法(即同步).

有没有办法在mongodb版本2.0中使用C#驱动程序的同步方法?

提示:是否可以使用c#运行mongodb shell函数?

i3a*_*non 11

编辑:在驱动程序的v2.2中,他们为所有异步操作添加同步版本,这些操作几乎一直是同步的.如果由于某种原因无法使用async-await,那么这是下一个最佳选择.


应该使用async操作作为驱动程序,async并且操作本质上是异步的(主要是I/O,通常是远程服务器).

但是,如果你必须保持同步,你有3个选项,从最推荐到最少订购:

  1. 继续使用同步API的旧(v1.x)版本的驱动程序.
  2. 使用新驱动程序,但使用旧API(client.GetServer).它需要一个不同的nuget包(名为Legacy)并且具有两种类型的API.
  3. 使用或使用async操作和阻止它们.Task.ResultTask.Wait

旧版本是首选,因为它使用同步I/O操作,这通常比使用async它们并阻塞它们更好.

其他选项都阻止了async操作,但遗留驱动程序经过精心实施,测试和维护,因此阻塞工作以良好的方式完成(即使用ConfigureAwait(false)和处理GetAwaiter().GetResult())