如何取消等待Task.Delay()? [英] How to cancel await Task.Delay()?
本文介绍了如何取消等待Task.Delay()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如您在此代码中所见:
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,它仍然会异步执行它的操作.
I want it to set textbox to string value of i
with one second period until I set LoopCheck
value to false
. But what it does is that it creates all iteration ones in for all and even if I set LoopCheck value to false it still does what it does asyncronously.
设置LoopCheck=false
时,我想取消所有等待的Task.Delay()
迭代.我该如何取消呢?
I want to cancel all awaited Task.Delay()
iteration when I set LoopCheck=false
. How can I cancel it?
推荐答案
Use the overload of Task.Delay
which accepts a CancellationToken
public async void TaskDelayTest(CancellationToken token)
{
while (!token.IsCancellationRequested)
{
for (int i = 0; i < 100; i++)
{
textBox1.Text = i.ToString();
await Task.Delay(1000, token);
}
}
}
var tokenSource = new CancellationTokenSource();
TaskDelayTest(tokenSource.Token);
...
tokenSource.Cancel();
这篇关于如何取消等待Task.Delay()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文