在对象的并行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){
您可以使用WithCancellation()
:
var cts = new CancellationTokenSource(timeout);
wallResults
.AsParallel()
.WithCancellation(cts.Token)
.WithDegreeOfParallelism(10)
.ForAll(p => { …
如果你不能使用.Net 4.5,你就不能使用CancellationTokenSource
的超时接受构造函数,所以你必须手动使用Timer
。