Heim >Backend-Entwicklung >C++ >Wie kann ich einen asynchronen Code in der Hauptmethode einer C# -Konsole -Anwendung ausführen?
Ausführen von asynchronem Code in der Hauptmethode von C#: Workarounds für die asynchrische Begrenzung
Der async
-Modifikator wird in älteren Versionen von C#nicht direkt auf der Main
-Methode unterstützt. In mehreren Techniken ermöglichen jedoch den Einstiegspunkt Ihrer Konsolenanwendung einen asynchronen Betrieb.
Moderner Ansatz: Async Main (Visual Studio 2017 Update 3 und später)
Die einfachste Lösung, wenn Ihre Entwicklungsumgebung sie unterstützt, ist es, Main
als async
zu deklarieren und ein Task
:
<code class="language-csharp">class Program { static async Task Main(string[] args) { // Your asynchronous code here... } }</code>
Verwenden Sie einen asynchronen Kontext (für ältere Visual Studio -Versionen)
für ältere Visual Studio -Versionen oder wenn Sie es vorziehen, eine async
Main
-Methode zu verwenden, nutzen Sie eine asynchrone Kontextbibliothek. AsyncContext
Aus dem Nito.AsyncEx
Nuget -Paket ist eine beliebte Wahl:
<code class="language-csharp">using Nito.AsyncEx; class Program { static void Main(string[] args) { AsyncContext.Run(() => MainAsync(args)); } static async void MainAsync(string[] args) { // Your asynchronous code here... } }</code>
Blockieren des Hauptfadens (weniger ideal)
Während funktional, blockiert der Hauptfaden direkt, bis asynchrone Operationen aufgrund potenzieller Probleme im Allgemeinen weniger bevorzugt sind. Dieser Ansatz verwendet GetAwaiter().GetResult()
:
<code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { // Your asynchronous code here... } }</code>
Wichtiger Hinweis: Die Verwendung GetAwaiter().GetResult()
ist entscheidend. Vermeiden Sie Wait()
oder greifen Sie direkt auf die Eigenschaft Result
zu, da diese Ausnahmen maskieren und zu schwerer-zu-Debug-Problemen führen können. AggregateException
Verbreitet die Ausnahmen ordnungsgemäß. GetAwaiter().GetResult()
Das obige ist der detaillierte Inhalt vonWie kann ich einen asynchronen Code in der Hauptmethode einer C# -Konsole -Anwendung ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!