簡體   English   中英

使用 Linq 的異步 Where 過濾器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM