我希望如果用户更改了列表框项,并且上一个任务尚未完成,则该任务停止并启动新任务。我该怎么做?我使用了此代码,但无法正常工作。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);}
1 回答

白猪掌柜的
TA贡献1893条经验 获得超10个赞
您应该将 传递给在任务中运行的代码,并时不时地从中调用令牌上的 ThrowIfCancellationRequest 方法。
CancellationToken
应将取消令牌传递给委托后的方法。由于取消是通过抛出 an 或 a 来完成的,任务的状态会因为其中抛出异常而出错。传递令牌时,任务会将其与取消例外中的令牌进行比较,如果它们匹配,则任务将被取消,而不是出错。
Task.Run
OperationCanceledException
TaskCanceledException
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报
0/150
提交
取消