Ereignisverarbeitungsverfahren: Sollte es vermieden werden?
async void
im Allgemeinen sind die besten Vorschläge für die Vermeidung der -Methode, insbesondere beim Beginn der Aufgabe, da ihnen der Mechanismus des Verfolgens und der Aufhängen von Aufgaben fehlt, und die abnormale Verarbeitung ist komplizierter. Aber wird dieses Prinzip für das Programm zur Verarbeitung von
async void
Schauen wir uns ein Beispiel an: async void
Anstatt diese Methode zu verwenden, ist es besser, den Code neu zu gestalten, um die Aufgabenverfolgung und Stornierungsfunktion zu erreichen:
<code class="language-csharp">private async void Form_Load(object sender, System.EventArgs e) { await Task.Delay(2000); // 执行异步操作 // ... }</code>
Was sind zusätzlich zu dem potenziellen Re -incoming -Problem die versteckten Fallen im Verarbeitungsverfahren
?<code class="language-csharp">Task onFormLoadTask = null; // 跟踪任务,可以实现取消 private void Form_Load(object sender, System.EventArgs e) { this.onFormLoadTask = OnFormLoadTaskAsync(sender, e); } private async Task OnFormLoadTaskAsync(object sender, System.EventArgs e) { await Task.Delay(2000); // 执行异步操作 // ... }</code>
Der Schlüssel ist, dass die Verwendung von async void
im Kontext überzeugt ist, der nicht elegant sein kann, um Abnormalitäten zu bewältigen. Bei der Ereignisverarbeitungsverfahren werden jedoch Abnormalitäten verarbeitet, indem die globale abnormale Verarbeitung weitergeleitet wird, um sicherzustellen, dass sie ohne explizite Fehlerbehandlung im Ereignisverarbeitungsprogramm selbst angemessen erfasst und verarbeitet werden. Dies ist der Schlüsselunterschied zwischen in dieser spezifischen Situation.
Um das Gerät zu testen, besteht der übliche Ansatz darin, die gesamte Logik aller async void
-Methoden zur Isolierung zu extrahieren: async void
-Methode normalerweise nicht empfohlen wird, ist sie akzeptabel, sie im Programm für die Ereignisverarbeitung zu verwenden, da das Framework für das Ereignisverarbeitungsprogramm einen inhärenten abnormalen Verarbeitungsmechanismus aufweist. Daher können Sie im Ereignisverarbeitungsprogramm async void
verwenden, ohne gegen die Best Practice zu verstoßen.
Das obige ist der detaillierte Inhalt vonSollten Sie asynchrone Void-Ereignishandler vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!