后台的 Linq 查询 - PLINQ 中的某些内容

发布于 2024-10-20 09:08:50 字数 196 浏览 0 评论 0原文

是否有开箱即用的东西可以在后台运行 Linq 查询 - 也许基于 PLINQ?我尝试了一些方法,但没有找到合适的方法。

我知道我可以创建一个后台工作人员来执行此操作,但我正在寻找“我可以使用”的东西,而不需要自己编写整个处理。

总体情况:我尝试在读取数据(通过 LINQ)时保持 WinForm 应用程序的反应性,并在读取大量数据时避免“阻塞”。

Is there something out-of-the-box to run a Linq query in background - maybe based on PLINQ? I have tried a few things, but did not find the proper approach.

I know I can create a background worker to do so, but I am looking for something "I can just use" not requiring to write the whole handling on my own.

Overall picture: I try to keep my WinForm application reactive wile reading the data (via LINQ) and avoid a "blocking" when reading larger amount of data.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昇り龍 2024-10-27 09:08:51

您可以生成一个 Task,并让它包装您的 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());

You could spawn a Task<T>, and have it wrap your PLINQ query.

PLINQ isn't about creating asynchronous operations (what you want), but rather concurrent processing within a single (blocking) operation. Instead, you probably want to do something like:

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());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文