我試圖製作一個異步方法,我可以多次調用並稍後等待 - 該方法應該調用數據庫,等待結果,一旦有結果,然後返回最終結果。它看起來像這樣:包含異步調用和同步操作對結果的異步方法
public async Task<long> GetSomethingFromDbAndSelectSomethingOnServer()
{
//stuff is just an Entity Framework database call
var stuff = await myEfDbContext.StuffTable.ToListAsync();
long itemsCount = stuff.Where(someQueryThatCantGoToDb).Count();
return itemsCount;
}
這似乎是一個明顯的失誤,因爲我指定的返回類型的任務,而我其實只返回一個長。這將編譯,而是拋出異常:
類型的第一次機會異常的「System.NotSupportedException」 發生在EntityFramework.dll
我打算使用此代碼如下所示:
Task<long> myAsyncCall = GetSomethingFromDbAndSelectSomethingOnServer();
long myCount = await myAsyncCall;
這可能是一個有點文不對題,但闡述,這裏有一些很好的的作品:
Task<long> pendingItemCountCall = _mongoItems.Find(filter).CountAsync();
long myCount2 = await pendingItemCountCall;
當然,不同之處在於它只是對db的異步調用,而沒有進一步的操作,我正在嘗試在我正在問的問題的SQL調用中做什麼。
編輯:
所以,實際上,這似乎是有問題的行:
var stuff = await myEfDbContext.StuffTable.ToListAsync();
如果我評論了這一點,並手動設置計數VAR,代碼去。我很困惑,但我更關心整體問題 - 我是否在這裏正確使用異步,不一定是我的特定錯誤的錯誤。
@HenkHolterman:它的工作! – VSO