Я играю с этими задачами 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()
{
}
Wow great info! Это сработало отлично, теперь мне нужно выяснить, как обрабатывать исключение в методе async. Спасибо чувак! Я прочитаю материал, который вы предложили. – Carlo
Удобное обращение было легко. Еще раз спасибо! =) – Carlo
Эй, парень, есть ли способ сделать это, если у меня нет доступа к медленному методу? Например, предположим, что slowFunc был в черном ящике, и у вас есть доступ только к вызову метода, но не для изменения чего-либо в нем? – Carlo