我需要使用尚未切换为异步的旧控制器来计算与过滤器匹配的项目。关于如何执行此操作,我们有一个async answer:
long result = await collection.CountAsync(Builders<Hamster>.Filter.Eq(_ => _.Name, "bar"));
我还在MongodDb网站上发现了一篇文章Introducing the 2.0 .NET Driver,该文章的评论似乎证实这是不可能的:
- 它只是异步:这是真的。新API只有异步(例如Microsoft的HttpClient)。通常,异步编程很容易,并且无需大量线程即可实现更高的服务器吞吐量。我们正在考虑是否也应该支持同步API,虽然我们已经收到了一些请求(包括你的),但一般用户似乎都渴望使用异步编程。
醇>
尽管如此,我想问一下,如果没有使控制器方法异步(及其所有帮助程序),是否有办法做到这一点/确认它是不可能的。
答案 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