【发布时间】:2011-03-04 20:22:43
【问题描述】:
是否有现成的东西可以在后台运行 Linq 查询 - 可能基于 PLINQ?我尝试了一些方法,但没有找到合适的方法。
我知道我可以创建一个后台工作人员来执行此操作,但我正在寻找“我可以使用”而不需要自己编写整个处理的东西。
总体情况:我尝试让我的 WinForm 应用程序在读取数据时保持反应性(通过 LINQ),并在读取大量数据时避免“阻塞”。
【问题讨论】:
是否有现成的东西可以在后台运行 Linq 查询 - 可能基于 PLINQ?我尝试了一些方法,但没有找到合适的方法。
我知道我可以创建一个后台工作人员来执行此操作,但我正在寻找“我可以使用”而不需要自己编写整个处理的东西。
总体情况:我尝试让我的 WinForm 应用程序在读取数据时保持反应性(通过 LINQ),并在读取大量数据时避免“阻塞”。
【问题讨论】:
您可以生成一个Task<T>,并让它包装您的 PLINQ 查询。
PLINQ 不是关于创建异步操作(您想要什么),而是在单个(阻塞)操作中进行并发处理。相反,您可能想要执行以下操作:
Task<IEnumerable<YourType>> task = Task.Factory.StartNew(
() =>
{
// Use standard LINQ here...
return myCollection.Where(SomeCriteria);
}
);
// When this is completed, do something with the results
task.ContinueWith( t =>
{
IEnumerable<YourType> results = t.Result;
// Use results here (on UI thread - no invoke required)
}, TaskScheduler.FromCurrentSynchronizationContext());
【讨论】: