c# – 使用LINQ with CancellationToken的正确方法

c# – 使用LINQ with CancellationToken的正确方法,第1张

概述我正在尝试使用.NET框架中提供的 CancellationToken机制编写一个支持取消的LINQ查询.然而,目前还不清楚结合取消和LINQ的正确方法. 使用PLINQ,可以写: var resultSequence = sourceSequence.AsParallel() .WithCancellation(cancel 我正在尝试使用.NET框架中提供的 CancellationToken机制编写一个支持取消的liNQ查询.然而,目前还不清楚结合取消和liNQ的正确方法.

使用PliNQ,可以写:

var resultSequence = sourceSequence.AsParallel()                                    .WithCancellation(cancellationToken)                                    .Select(myExpensiveProjectionFunction)                                    .ToList();

不幸的是,WithCancellation()只适用于一个ParallelEnumerable,所以它不能与普通的老liNQ查询一起使用.当然,可以使用WithDegreeOfParallelism(1)将并行查询转换为顺序查询 – 但这显然是一个黑客:

var resultSequence = sourceSequence.AsParallel()                                    .WithDegreeOfParallelism(1)                                    .WithCancellation(cancellationToken)                                    .Select(myExpensiveProjectionFunction)                                    .ToList();

我也想避免为这个 *** 作创建一个单独的Task,因为我需要在几个地方这样做,我需要能够在某些实例中控制这个代码运行的线程.

所以,编写我自己实现的WithCancellation() – 有没有办法实现同样的事情?

解决方法 这个方法怎么样?
var resultSequence = sourceSequence.WithCancellation(cancellationToken)                        .Select(myExpensiveProjectionFunction)                        .ToList();static class CancelExtention{    public static IEnumerable<T> WithCancellation<T>(this IEnumerable<T> en,CancellationToken token)    {        foreach (var item in en)        {            token.ThrowIfCancellationRequested();            yIEld return item;        }    }}
总结

以上是内存溢出为你收集整理的c# – 使用LINQ with CancellationToken的正确方法全部内容,希望文章能够帮你解决c# – 使用LINQ with CancellationToken的正确方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1237171.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存