2016-02-06 57 views
0

當我嘗試在FindAll(filter)方法中使用await關鍵字時,我最終得到了不可編譯的代碼。例如: -Mongo`await FindAsync`不能編譯。

using (var cursor = await collection.FindAsync(filter)) 
{ 
    while (await cursor.MoveNextAsync()) 
    { 
     var batch = cursor.Current; 
     foreach (var document in batch) 
     { 
      // process document 
      count++; 
     } 
    } 
} 

所賜:

The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'. 

如果我看源,該方法確實返回Task

public static Task<IAsyncCursor<TDocument>> FindAsync<TDocument>(...) 

任何想法是怎麼回事?

回答

1

您的函數未標記爲async,而不是mongo one而是您的代碼。

爲了使異步調用的函數裏面,你必須標註該功能爲異步:

public async void YourFunction() 
{ 
    //Here you can use await 
} 

否則您將收到編譯錯誤。

+0

就是這樣,謝謝你。這是一種測試方法,它不會發生在我身上! – BanksySan

+0

'async void'?絕對是一個不。使它成爲「異步任務」。 –

0

你的函數應該是異步的。 即

async Task<int> myFunc() 而不是 int myFunc()