2016-02-04 40 views
3

我需要使用尚未切换到异步的旧控制器来计数匹配过滤器的项目。我们对如何做到这一点的async answerMongo DB C#驱动程序2.0同步计数

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

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

  • 它只是异步的:这是真的。新的API只有异步的趋势(例如微软的HttpClient)。一般来说,异步编程很容易,并且不需要大量线程就可以获得更高的服务器吞吐量。我们正在考虑是否还应该支持同步API,并且在我们收到一些请求(包括您的)时,一般用户似乎很想使用异步编程。
  • 尽管如此,我想问一下,如果有一种方法可以做到这一点/确认,它不会使控制器方法异步(及其所有佣工)是不可能的。

    +1

    你应该能够不'await'运行'collection.CountAsync()Result',它只会同步运行。 – DLeh

    +0

    看起来像我们在同一时间发布。请将其发布为答案,以便我可以接受。复制我的,如果你想,我会删除我的。 – VSO

    +1

    不用担心!只要你弄清楚了 – DLeh

    回答

    2

    由于驾驶员的V2.2有重载同步对于所有异步方法,您应该使用它们而不是在异步API上进行阻塞。这样做是不太高性能,并可能导致死锁。

    long countOfItemsMatchingFilter = yourCollectionName.Count(yourFilterName); 
    
    +0

    如果您正在运行早期版本的2.x,请参阅我的答案。 – VSO

    0

    嗯...这很简单 - 我忘了你可能只是用户.Result绕过整个“同步方法没有await”的事情:

    long countOfItemsMatchingFilter = yourCollectionName.CountAsync(yourFilterName).Result; 
    
    相关问题