导航
  • 全部
...

CancellationTokenSource.Token 能否复位?

happyhhb 2015-04-11 02:48:20
不知道问题问得对不对,CancellationTokenSource.Cancel() 退出 Task 后,想再次启动同一 Task ,貌似不行:

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

  6. CancellationTokenSource cts = new CancellationTokenSource();
  7. public void ThreadMain()
  8. {
  9. int count = 0;
  10. while (count < 5) //要循环5次
  11. {
  12. count++;

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

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

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

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

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

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

  26. Thread.Sleep(1000);
  27. }
  28. }


目前运行结果如下:
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能够再次正常运行呢?

感谢各位大虾指导,^_^
...全文
给本帖投票
2014 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyhhb 2015-04-12
  • 打赏
  • 举报
回复
正解,谢谢,我也是在外国论坛看到这个建议
armipotence 2015-04-12
  • 打赏
  • 举报
回复 2
CancellationTokenSource每次用时需要重新new

111,076

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部