【发布时间】:2014-04-04 20:38:49
【问题描述】:
正如你在这段代码中看到的:
public async void TaskDelayTest()
{
while (LoopCheck)
{
for (int i = 0; i < 100; i++)
{
textBox1.Text = i.ToString();
await Task.Delay(1000);
}
}
}
我希望它将文本框设置为 i 的字符串值,持续一秒,直到我将 LoopCheck 值设置为 false 。但它所做的是它为所有创建了所有迭代,即使我将 LoopCheck 值设置为 false,它仍然会异步执行它所做的事情。
当我设置LoopCheck=false 时,我想取消所有等待的Task.Delay() 迭代。如何取消?
【问题讨论】:
-
我建议查看取消令牌。您不需要循环检查。您需要将令牌传递给该方法并检查它是否在每次延迟后被取消。
-
完全正确。但正如你可以承认的那样,关于这方面的文档是非常新的,而且还不够。也许这里有人知道如何使用cancellationtoken
-
其实cancellation documentation已经很详尽了,到现在已经快四年了。
标签: c# async-await