CancellationTokenSource.Token 能否复位?

happyhhb 2015-04-11 02:48:20
不知道问题问得对不对,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能够再次正常运行呢?

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

111,113

社区成员

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

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

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