[英]Asynchronous Where Filter with Linq
我有一個通過 WebService 的async
調用填充的元素List
(那里沒問題)。
我需要過濾該列表才能在應用程序視圖中顯示某些內容。 我試過這個:
List<DateTime> dates = EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToList();
我也嘗試使用 LINQ 的Select
函數。 問題是,無論何時調用此代碼, EventsDates
列表都沒有填充,WebService 還沒有響應。
如何嘗試異步過濾EventsDates
列表?
“在哪里”不應該是異步的,你需要做 EventsDates 填充等待。 像這樣的東西:
EventsDates = await YourWebServiceMethodCall();
List<DateTime> dates = EventsDates.Where (x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToList();
您可以像這樣異步調用它,但正如其他人所說,您需要等待 eventDates 在使用它之前解開來自服務的響應。 @Dmitry 的回答是正確的。 我只是把它放在這里來回答您關於如何異步使用 Where 的問題,以防您將來需要它。
using System.Data.Entity;
List<DateTime> dates = await EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToListAsync();
你也可以這樣做:
var list = someCollection.Where(async x => x.Prop == await SomeLongRunningProcess());
看起來您並沒有await
結果來填充EventDates
。
參考這個微軟文檔,你應該做的只是等待異步列表在查詢后返回https://docs.microsoft.com/es-es/ef/ef6/fundamentals/testing/mocking?redirectedfrom=MSDN#testing -with-async-queries
using Microsoft.EntityFrameworkCore;
var consult = EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year)
List<DateTime> dates = await consult.ToListAsync();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.