在C#中使用“生命周期”启动并行线程

时间:2016-06-03 16:52:38

标签: c# multithreading timeout

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

我想处理所有这些文件(或者并行批处理)但是给每个线程限制它可以花多长时间(例如5分钟)。所以我开始每个线程,如果它在5分钟内没有完成,它应该被杀掉。

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

这是一些伪代码:

ProccessFile

这将很好地分离每个文件的线程,并在路径中的每个.txt文件上正确运行ProcessFile,但有没有办法将每个{{1}}的调用限制为仅一定的时间?

1 个答案:

答案 0 :(得分:0)

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