我需要一个允许我在线程运行超过 X 秒时执行某些操作的逻辑。
就像在这个非常丑陋的例子中一样,它会每秒检查一次,如果workerThread
运行了 10 分钟或更长时间,它会显示一条消息......
var timeWorking = TimeSpan.FromMinutes(0);
workerThread = new Thread(RunTask);
workerThread.Start(task);
while (workerThread.IsAlive)
{
Thread.Sleep(TimeSpan.FromSeconds(1));
timeWorking = timeWorking.Add(TimeSpan.FromSeconds(1));
if (timeWorking.TotalMinutes < 10) continue;
timeWorking = TimeSpan.FromMinutes(0);
Console.Writeline("Here we go... the event")
}
请帮我把它做对......我应该使用什么Diagnostics.StopWatch
,System.Timers.Timer
或者Threading.Timer
?
UPD:所有的答案让我更加困惑......
任务是检查是否workerThread
运行超过 X 时间,如果是,则调用某个方法,重置计时器并再次检查workerThread
自上次调用该方法以来现在是否运行超过 X 时间……等等等等……
UPD2:基本上我有一个线程根据从 AmazonSQS 队列中提取的信息进行处理。SQS 队列消息具有可见性超时。如果任务花费的时间超过默认可见性超时 - 消息将在任务完成之前返回队列。然后它将被另一台机器拾取。为避免这种情况,我需要延长 SQS 消息的可见性超时。所以我可以通过定期检查线程是否仍然如此来做到这一点,isALive
然后我可以在消息可见性超时中增加几分钟。大约一分 50 秒后,我应该再次检查线程是否仍然存在,isALive
然后再添加几分钟,依此类推。