TaskCanceledException beim Aufrufen von Task.Delay mit einem CancellationToken in einem Tastaturereignis

8

Ich versuche, die Verarbeitung einer Methode (SubmitQuery () im Beispiel), die von einem Tastaturereignis in WinRT aufgerufen wird, zu verzögern, bis für einen bestimmten Zeitraum (500ms in diesem Fall) keine weiteren Ereignisse aufgetreten sind.

Ich möchte nur, dass SubmitQuery () ausgeführt wird, wenn der Benutzer die Eingabe beendet hat.

Mit dem folgenden Code erhalte ich eine System.Threading.Tasks.TaskCanceledException, wenn Task.Delay (500, cancellationToken.Token); wird genannt. Was mache ich hier bitte falsch?

%Vor%     
Andrew Roberts 11.12.2013, 01:59
quelle

2 Antworten

11

Das ist zu erwarten. Wenn Sie die alte Delay abbrechen, wird eine Ausnahme ausgelöst. So funktioniert die Stornierung. Sie können eine einfache try / catch um die Delay setzen, um die erwartete Ausnahme abzufangen.

Beachten Sie, dass Rx eine natürlichere Anpassung als async ist, wenn Sie eine zeitbasierte Logik verwenden möchten.

    
Stephen Cleary 11.12.2013, 02:50
quelle
26

Wenn Sie ContinueWith() mit einer leeren Aktion hinzufügen, wird die Ausnahme nicht ausgelöst.

%Vor%     
J. van Langen 24.09.2015 18:42
quelle