当前位置: 代码迷 >> C# >> CancellationTokenSource.Token 可不可以复位
  详细解决方案

CancellationTokenSource.Token 可不可以复位

热度:71   发布时间:2016-05-05 04:07:28.0
CancellationTokenSource.Token 能否复位?
不知道问题问得对不对,CancellationTokenSource.Cancel() 退出 Task 后,想再次启动同一 Task ,貌似不行:

        private void button1_Click(object sender, EventArgs e)
        {
            Thread t1 = new Thread(ThreadMain);??//用线程,避免阻塞界面
            t1.Start();
        }

        CancellationTokenSource cts = new CancellationTokenSource();
        public void ThreadMain()
        {
            int count = 0;
            while (count < 5)   //要循环5次
            {
                count++;

                //此处应该如何操作cts或者cts.Token,让第一次cts.Cancel()后能够在此复位,以继续正常运行Task???
                Task.Factory.StartNew(MyTask, cts.Token); 

                Thread.Sleep(5 * 1000); //等待任务执行5秒

                cts.Cancel();   //取消任务

                richTextBox1.Text += "count = " + count.ToString() + "\r\n";
            }

            richTextBox1.Text += "已停止";
        }

        public void MyTask()
        {
            while (!cts.IsCancellationRequested)   //判断是否取消任务,由上面的cts.Cancel()控制
            {
                richTextBox1.Text += DateTime.Now + "\r\n";

                Thread.Sleep(1000);
            }
        }


目前运行结果如下:
2015/4/11 14:43:23
2015/4/11 14:43:24
2015/4/11 14:43:25
2015/4/11 14:43:26
2015/4/11 14:43:27
count = 1
count = 2
count = 3
count = 4
count = 5
已停止

就是说第一次运行了Task,并cts.Cancel()后,Task再也没有运行了
怎么让cts.Cancel()后复位,让Task能够再次正常运行呢?

感谢各位大虾指导,^_^
------解决思路----------------------
CancellationTokenSource每次用时需要重新new
  相关解决方案