查找在C#中运行多个任务时每个任务所花费的时间

时间:2017-03-16 17:26:09

标签: c# task

我试图找出是否有任何内置方法或属性告诉每个任务在执行多个任务时所花费的时间(比如在数组或列表中添加任务并同时执行所有任务并等待完成所有这些)。在此过程之间,如果一个或多个任务比预期花费的时间多得多,我应该能够识别该任务并从阵列或列表中删除该任务。如果没有内置方法或属性,那么还有其他方法可以找到它吗?

2 个答案:

答案 0 :(得分:3)

您可以使用StopWatch

它专门用于准确计算代码的执行时间。 听起来你可能正在使用TPL并行运行这些任务,如果是这种情况,也许你可以为你正在创建的所有任务分配一个CancellationToken,然后使用该令牌同时停止所有任务。 StopWatch超过了时间限制。

或者,为每个任务分别指定一个StopWatch,并在必要时让它们停止。

答案 1 :(得分:2)

很难从System.Diagnostics库中击败好的Stopwatch。设置ConcurrentDictionary<int,StopWatch>,其中整数表示任务的托管线程ID(您也可以将其键入任务对象或线程本身,具体取决于您如何旋转它们,或者您可以设置通信令牌包括“取消”方法)。每个线程或任务在启动时,应该创建一个秒表,将其添加到词典中,然后在继续执行其工作之前将其添加到Start()中。完成后,它应该Stop()它的秒表并从字典中删除它(你可以把它产生的经过时间放入一个ConcurrentQueue,你可以在主管线程中使用它记录运行时间;字典用于跟踪运行活动线程的次数,以便您的主管可以管理它们)。然后,您的主管线程可以定期检查比平均时间长得多的任务,当它找到一个时,它可以跳过取消令牌并从词典中删除该条目。