Timeouts für asynchrone Operationen in C#
implementieren asynchrone Operationen verwalten effektiv müssen häufig Zeitüberschreitungsmechanismen einbeziehen, um eine unbestimmte Blockierung zu verhindern. Dieser Artikel zeigt, wie ein Task.await
-Operation in C# nach einem bestimmten Zeitlimitraum mit CancellationTokenSource
.
CancellationTokenSource
Die CancellationTokenSource
-Kläufe bietet einen Mechanismus zur Steuerung der Stornierung asynchroner Aufgaben. Wenn Sie ein
Beispielcode:
CancellationTokenSource
Das folgende C# -Code -Snippet zeigt die Verwendung von
<code class="language-csharp">private static async Task<string> GetFinalUrl(PortalMerchant portalMerchant) { // ... (Existing code for setting browser features and URL validation) ... Uri trackingUrl = new Uri(portalMerchant.Url); var cts = new CancellationTokenSource(); var task = MessageLoopWorker.Run(DoWorkAsync, trackingUrl, cts.Token); // Use Task.WhenAny to monitor for task completion or timeout if (await Task.WhenAny(task, Task.Delay(5000, cts.Token)) == task) { // Task completed within the timeout if (!String.IsNullOrEmpty(task.Result?.ToString())) { return new Uri(task.Result.ToString()).ToString(); // Ensure string return } else { throw new Exception("Parsing Failed"); } } else { // Timeout occurred cts.Cancel(); // Explicitly cancel the task throw new TimeoutException(); } } static async Task<object> DoWorkAsync(object[] args) { // ... (Existing code for web browser interaction) ... }</code>
GetFinalUrl
Dieser verbesserte Code -Snippet verarbeitet explizit potenzielle Nullwerte und stellt sicher, dass eine Zeichenfolge von Task.WhenAny
zurückgegeben wird. Die Verwendung von DoWorkAsync
elegant wartet darauf, dass entweder die cts.Cancel()
-Abgabe abgelaufen ist, oder das Ausgangspunkt. Wenn eine Zeitüberschreitung auftritt, wird TimeoutException
aufgerufen, um den asynchronen Betrieb sauber abzubrechen, und ein MessageLoopWorker.Run
wird geworfen. Die Fehlerbehandlung wird verbessert, um spezifischere Ausnahmemeldungen bereitzustellen. Denken Sie daran, CancellationToken
anzupassen, um das
Das obige ist der detaillierte Inhalt vonWie storniere ich eine Aufgabe.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!