2016-02-04 41 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; 
    
    相關問題