在对象的并行linq中指定任务超时

本文关键字:任务 超时 linq 对象 并行 | 更新日期: 2023-09-27 18:27:10

我有一个图片列表,我想并行处理,但会超时。我的旧代码通过分页项目并使用WaitHandles来实现这一点,但我希望使用.Net 4中新的Parallel Linq或Tasks库。

下面的代码段正在工作,如何添加超时?(超时将针对每个正在执行的任务,而不是针对所有要处理的项目的超时)

   private PictureList FetchPictures(List<Picture> wallResults) 
   {                
            wallResults
                .AsParallel()
                .WithDegreeOfParallelism(10)
                .ForAll(delegate(Picture p){

在对象的并行linq中指定任务超时

您可以使用WithCancellation()

var cts = new CancellationTokenSource(timeout);
wallResults
    .AsParallel()
    .WithCancellation(cts.Token)
    .WithDegreeOfParallelism(10)
    .ForAll(p => { …

如果你不能使用.Net 4.5,你就不能使用CancellationTokenSource的超时接受构造函数,所以你必须手动使用Timer