正如您在这段代码中看到的:
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
。我怎样才能取消它?
Use the overload http://msdn.microsoft.com/en-us/library/hh194845%28v=vs.110%29.aspx of 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)