CancellationTokenSource取消预期更多

时间:2014-11-16 00:20:33

标签: c# task

基本上我正在运行一个程序,它执行一个重复多次的方法(例如7次),但我需要一个选项来取消当前运行其中一个,但仍允许新的启动。

我的问题是,只要我点击取消按钮,程序就会结束。所以我似乎错过了一些东西。

主:

for(int i = 0; i < 7; i++)
{
    cts = new CancellationTokenSource();
    taskUbung = Task.Factory.StartNew(async() =>
    {
        await doSomething();
    }, cts.Token);
}

按钮:

 private void buttonSkipUbung_Click(object sender, RoutedEventArgs e)
 {
    cts.Cancel();
 }

因此,如果我在第3轮doSomething()上按下按钮,剩下的4将永远不会执行。 为了我想要的行为,我需要改变什么?我可以使用一些布尔值并在doSomething()中返回,但我认为这样会更清晰,响应更快,如果有效的话。

1 个答案:

答案 0 :(得分:0)

您需要在某种列表中跟踪您正在创建的令牌。否则你只记得最后一个,只在那个上打电话取消