使用 C# 中的"lifetime"启动并行线程



不确定这是否可能,但这是想法。 我必须在路径中处理一堆文件,并且我想同时处理它们。 我的应用程序使用外部进程(例如FTP),这些进程可能会以其他方式超时或出错(肯定不理想,但尝试一次修复一件事)。

我想处理所有这些文件(或并行批处理),但给每个线程一个可能需要多长时间的限制(比如 5 分钟)。 所以我启动了每个线程,如果在 5 分钟内没有完成,它应该被杀死。

因为有可能(几乎可以肯定)所有线程都不会同时启动,我不想总共给它五分钟,但每个线程应该有五分钟

这里有一些伪代码:

DirectoryInfo di = new DirectoryInfo(somePath);
List<FileInfo> files = di.GetFiles("*.txt"); // grab all text files in path
Parallel.ForEach(files, currFile => ProcessFile(currFile));

这将很好地剥离每个文件的线程,并在路径中的每个.txt文件上适当地运行ProccessFile,但是有没有办法将每个调用限制为ProcessFile只有一定的时间量?

如果我理解你的问题,我认为这是很有可能的。 您正在尝试剥离一堆本质上执行相同逻辑的任务,只是在不同的文件上。 但是您不希望它花费太长时间并在这样做时超时。 如果这是正确的,那么我认为Task超时参数就是您要找的。 快速搜索将我带到了这个SO解决方案,我认为与您寻找的解决方案相似。 本质上,您将创建处理文件的方法。 以这种方式使用任务是最简单,我认为处理这个问题最干净的方法。 其他选项包括在每个线程内创建计时器或使用计时器管理每个线程的类。 我已经完成了几乎所有可以完成的方式(取消令牌除外),而任务,异步/等待是迄今为止IMO的最佳选择。

相关内容

  • 没有找到相关文章

最新更新