我正在玩這些Windows 8 WinRT任務,我正在嘗試使用下面的方法取消任務,並且它在某些方面起作用。 CancelNotification方法會被調用,這會讓您認爲任務已被取消,但在後臺任務會繼續運行,然後在任務完成後,任務的狀態始終完成並且從不取消。有沒有辦法在取消任務時完全停止任務?如何在等待中取消任務?
private async void TryTask()
{
CancellationTokenSource source = new CancellationTokenSource();
source.Token.Register(CancelNotification);
source.CancelAfter(TimeSpan.FromSeconds(1));
var task = Task<int>.Factory.StartNew(() => slowFunc(1, 2), source.Token);
await task;
if (task.IsCompleted)
{
MessageDialog md = new MessageDialog(task.Result.ToString());
await md.ShowAsync();
}
else
{
MessageDialog md = new MessageDialog("Uncompleted");
await md.ShowAsync();
}
}
private int slowFunc(int a, int b)
{
string someString = string.Empty;
for (int i = 0; i < 200000; i++)
{
someString += "a";
}
return a + b;
}
private void CancelNotification()
{
}
哇偉大的信息!這工作完美,現在我需要弄清楚如何在異步方法中處理異常。謝啦!我會讀你建議的東西。 – Carlo 2012-04-13 02:48:55
好處理很簡單。再次感謝! =) – Carlo 2012-04-13 02:52:00
嘿,如果我沒有訪問慢方法,有沒有辦法做到這一點?例如,假設slowFunc位於黑盒子中,並且您只能訪問該方法,但不能修改其中的任何內容? – Carlo 2012-04-13 19:12:55