0

次のメソッドをトリガーするイベントがあるとします。

    public static void DoSomeWork(object obj)
    {
        CancellationTokenSource cts = (CancellationTokenSource)obj;
        if (cts.IsCancellationRequested) 
            return;
        Console.WriteLine("Started thread {0}.", Name);
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine("Working on thread {0} at step {1}.", Name, i);
            Thread.Sleep(10000);
            if (cts.IsCancellationRequested)
            {
                Console.WriteLine("Canceled thread {0} at step {1}.", Name, i);
                return;
            }
        }
        Console.WriteLine("Completed thread {0}.", Name);
    }

元のオブジェクトはName文字列としての名前とCancellationTokenSource. 私が理解したところでは、それを検知してManualResetEvent.WaitOne()電話をかければ、キャンセルが完了するのを待つことができます。処理する新しいイベントが 1 つしかない場合、これはうまくいくようです。ただし、現在のプロセスのキャンセル中にこのイベントを複数回トリガーすると、代わりに両方のイベントが同時に実行されるようになりました。望ましい結果は、最新のイベントより前のすべてのイベントがキャンセルされ、処理が最新のイベントで実行されることです。ManualResetEvent.Set()cts.IsCancellationRequested == true

どうすればこれを機能させることができますか?私は正しい軌道に乗っていますか?この質問への回答に役立つ追加情報があればお知らせください。

4

0 に答える 0