我想如果用户更改了列表框项目而上一个任务尚未完成,则该任务停止并开始一个新任务。我该怎么办?
我使用了这段代码,但是没有用。
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token;
private void Listbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (task != null && (task.IsCompleted == false || task.Status == TaskStatus.Running))
{
if (source != null)
source.Cancel();
}
task = LoadArts();
}
private async Task LoadArts()
{
token = source.Token;
await Task.Run(() =>
{
}
, token);
}
答案 0 :(得分:0)
CancellationToken
传递给任务中运行的代码,并不时从令牌上调用令牌上的ThrowIfCancellationRequested方法。Task.Run
方法。由于取消是通过抛出OperationCanceledException
或TaskCanceledException
来完成的,因此任务的状态将变得有缺陷,因为其中已引发异常。传递令牌时,任务会将其与取消异常中的令牌进行比较,如果它们匹配,则任务将被取消,而不是错误。