gpt4 book ai didi

c# - 如何取消await Task.Delay()?

转载 作者:IT王子 更新时间:2023-10-29 04:33:54 27 4
gpt4 key购买 nike

正如您在这段代码中看到的:

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() 迭代。我怎样才能取消它?

最佳答案

使用 overload Task.Delay 接受 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();

关于c# - 如何取消await Task.Delay()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22872589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com