我们有一棵树,当用户点击任何节点时,它会从 Web 服务中查询数据,并替换结果。但是,有时需要时间。所以我尝试将 Web 服务调用包装在一个任务中。我想在任务尚未完成并且用户单击其他节点时取消任务。以下是我的示例代码。然而取消任务块不能被执行,即使 _cancelTokenSource.Cancel() 执行。MSDN 提供的大多数示例都是基于 CPU 限制的,而不是 I/O 限制的。谁能告诉我如何全部取消网络服务?提前致谢
private void OnNodeClicked(int id)
{
if (_cancelTokenSource != null)
_cancelTokenSource.Cancel();
IsRunning = true;
var uiSchedule = System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext();
_cancelTokenSource = new CancellationTokenSource();
var loadDataTask = System.Threading.Tasks.Task.Factory.StartNew<int[]>(() =>
{
// Call web service here
}, _cancelTokenSource.Token);
loadDataTask.ContinueWith((result) =>
{
// Populate data
IsRunning = false;
}, CancellationToken.None, System.Threading.Tasks.TaskContinuationOptions.OnlyOnRanToCompletion, uiSchedule);
loadDataTask.ContinueWith((result) =>
{
// set cancel state here
IsRunning = false;
}, CancellationToken.None, System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled, uiSchedule);
}