2
我們有一棵樹,當用戶點擊任何節點時,它將查詢來自Web服務的數據,並取代結果。但是,有時需要時間。所以我嘗試將Web服務調用包裝在一個任務中。我想在任務尚未完成時取消任務,並且用戶單擊其他節點。以下是我的示例代碼。但是取消任務塊不能執行,即使執行了_cancelTokenSource.Cancel()。 MSDN提供的大多數樣本基於CPU綁定,而不是I/O綁定。任何人都可以告訴我如何取消所有的Web服務?在此先感謝如何取消任務內的Web服務請求,並在取消發生時做一些事情
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);
}