スレッドが 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
、メッセージの表示タイムアウトに数分を追加できます。1 分 50 秒ほど経過したら、もう一度確認し、スレッドがまだ残っている場合はisALive
さらに数分追加する必要があります。