繁体   English   中英

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

[英]Is there a way to use the MongoDB C# driver synchronously

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

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

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

编辑:在驱动程序的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()无处不在)

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

没有! 奥卡姆剃刀! 最简单的答案通常是正确的答案。 异步编程继续编程和调试更加困难。 为什么被迫将它用于简单的任务。

这是我至少在我自己的线程中强制同步的方法。

var c1 = collection.Find(filter);
var y = c1.ToListAsync();
y.Wait();
var w = y.Result.FirstOrDefault();

完美的例子。 为什么只有一行代码需要4行代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM