如何排队和取消多个事件?

时间:2012-11-16 16:02:58

标签: c# cancellationtokensource

假设我们有一个触发以下方法的事件:

    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()后拨打ManualResetEvent.Set(),我可以使用cts.IsCancellationRequested == true等待取消完成。如果我只有一个要处理的新事件,这似乎工作正常。但是,如果我在当前进程取消时多次触发此事件,它现在会同时运行这两个事件。期望的结果是取消最近事件之前的所有事件,并且处理在最近的事件上运行。

我该如何使这项工作?我是在正确的轨道上吗?如果我能提供任何可以帮助回答此问题的其他信息,请告诉我。

0 个答案:

没有答案