Gram w te zadania Windows 8 WinRT i próbuję anulować zadanie za pomocą poniższej metody i działa do pewnego momentu. Zostanie wywołana metoda CancelNotification, co powoduje, że uważasz, że zadanie zostało anulowane, ale w tle zadanie nadal działa, a po jego zakończeniu status zadania jest zawsze zakończony i nigdy nie jest anulowany. Czy istnieje sposób na całkowite zatrzymanie zadania po jego anulowaniu?Jak anulować zadanie w oczekiwaniu?
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()
{
}
Wow świetne informacje! To działało idealnie, teraz muszę wymyślić jak sobie poradzić z wyjątkiem w asynchronicznej metodzie. Dzięki! Przeczytam rzeczy, które zasugerowałeś. – Carlo
Obsługa ok była łatwa. Znowu dziękuję bardzo !! =) – Carlo
Hej człowieku, czy jest sposób, aby to zrobić, jeśli nie mam dostępu do powolnej metody? Załóżmy na przykład, że slowFunc był w blackboksie i masz dostęp tylko do wywołania metody, ale nie do modyfikowania czegokolwiek w niej zawartego? – Carlo