Mongo DB C#Driver 2.0同步计数

时间:2016-02-04 21:04:40

标签: c# asynchronous mongodb-csharp-2.0

我需要使用尚未切换为异步的旧控制器来计算与过滤器匹配的项目。关于如何执行此操作,我们有一个async answer

long result = await collection.CountAsync(Builders<Hamster>.Filter.Eq(_ => _.Name, "bar"));

我还在MongodDb网站上发现了一篇文章Introducing the 2.0 .NET Driver,该文章的评论似乎证实这是不可能的:

  
      
  1. 它只是异步:这是真的。新API只有异步(例如Microsoft的HttpClient)。通常,异步编程很容易,并且无需大量线程即可实现更高的服务器吞吐量。我们正在考虑是否也应该支持同步API,虽然我们已经收到了一些请求(包括你的),但一般用户似乎都渴望使用异步编程。
  2.   

尽管如此,我想问一下,如果没有使控制器方法异步(及其所有帮助程序),是否有办法做到这一点/确认它是不可能的。

2 个答案:

答案 0 :(得分:2)

由于驱动程序的v2.2存在所有异步方法的同步重载,因此您应该在异步API上使用它们而不是阻塞。这样做效率较低,可能会导致死锁:

long countOfItemsMatchingFilter = yourCollectionName.Count(yourFilterName);

答案 1 :(得分:0)

嗯......这很容易 - 我忘了你可以让用户private static List<DirectoryInfo> list_to_copy = new List<DirectoryInfo>(); DirectoryInfo usbdirectory; backing_up_interface backing_up_interface; bool newfilesfound = false; private void usbchecker_timer_Tick(object sender, EventArgs e) { foreach (DriveInfo usbname in DriveInfo.GetDrives().Where(usbproperty => usbproperty.DriveType == DriveType.Removable && usbproperty.IsReady)) { if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory.ToString() + usbname.VolumeLabel + @"\")) { usbdirectory = new DirectoryInfo(usbname.Name); if (!list_to_copy.Contains(usbdirectory)) { list_to_copy.Add(usbdirectory); newfilesfound = true; } } } if (newfilesfound == true) { process_copy(); newfilesfound = false; } } //where information is passed to private void process_copy() { for (int i = 0; i < list_to_copy.Count; i++) { backing_up_interface = new backing_up_interface(list_to_copy[i]); backing_up_interface.Show(); MessageBox.Show(list_to_copy[i].ToString()); } } 绕过整个&#34;没有.Result同步方法&#34;事情:

await