如您在此代码中看到的:
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,它仍然会异步执行。我想在设置
Task.Delay()
时取消所有等待的LoopCheck=false
迭代。如何取消呢? 最佳答案
使用Task.Delay
的overload接受CancellationToken
public async Task TaskDelayTest(CancellationToken token)
{
while (LoopCheck)
{
token.throwIfCancellationRequested();
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();