使用Linq过滤异步的位置

Mar*_*art 7 c# linq asynchronous

我有一个List通过async调用WebService 填充的元素(没有问题).

我需要过滤该列表,以便在应用程序视图中显示某些内容.我试过这个:

List<DateTime> dates = EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToList();
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用SelectLINQ 的功能.问题是,无论何时调用此代码,EventsDates都不会填充列表,WebService尚未响应.

我怎么能尝试EventsDates异步过滤列表?

Dmi*_*riy 7

“哪里”不应该是异步的,您需要完成EventsDates的填充。像这样:

EventsDates = await YourWebServiceMethodCall();
List<DateTime> dates = EventsDates.Where (x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToList();
Run Code Online (Sandbox Code Playgroud)


Ste*_*ner 7

您可以像这样异步调用它,但正如其他人所说,您需要等待eventDates在使用之前从服务中解包响应.@Dmitry的回答是正确的.我只是在这里回答你如何使用异步的问题,以备将来需要时使用.

using System.Data.Entity;

List<DateTime> dates = await EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToListAsync();
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

var list = someCollection.Where(async x => x.Prop == await SomeLongRunningProcess());
Run Code Online (Sandbox Code Playgroud)

  • `ToListAsync()`要求底层数据源实现作为EF接口的`IDbAsyncEnumerable`.如果您尝试在非EF集合上使用它,它将抛出异常.https://msdn.microsoft.com/en-us/data/dn313107 (4认同)