Sto giocando con queste attività di Windows 8 WinRT e sto cercando di annullare un'attività utilizzando il metodo seguente e funziona fino a un certo punto. Viene chiamato il metodo CancelNotification, che ti fa pensare che l'attività sia stata annullata, ma in background l'attività continua a funzionare, quindi dopo che è stata completata, lo stato dell'attività è sempre completato e mai annullato. C'è un modo per interrompere completamente l'attività quando viene annullata?
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()
{
}