タイマーがあり、間隔でいくつかの関数を呼び出しています。今、私はこのようなものを持っています:
private System.Timers.Timer timer;
private int sync;
void Start()
{
timer = new System.Timers.Timer(interval);
timer.Elapsed += new ElapsedEventHandler(Elapsed);
timer.Enabled = true;
}
void Elapsed(object s, ElapsedEventArgs e)
{
if (System.Threading.Interlocked.CompareExchange(ref sync, 1, 0) == 0)
{
Parallel.Invoke( () => Function1(), () => Function2(), () => Function3(),
() => Function4() );
}
sync = 0;
}
これは悪くありません。関数を並列に開始できますが、1 つの関数を 2 回以上実行することはできません (これが私が望む方法です)。問題はfunction4()
、 my よりも時間がかかるとしましょうinterval
。そのため、他の関数も待機する必要があります。そこを削除するsync
と、他の関数は待機しませんが、別のfunction4()
呼び出しが別のスレッドで開始される可能性があります-1つの関数が2回実行されることは望ましくありません。助言がありますか?ありがとうございました