Main
Modifikator: Eine Lösung async
Die Herausforderung: asynchrones Programmieren, das das Schlüsselwort unter Verwendung des Schlüsselworts von async
wird in der Methode Main
nicht direkt unterstützt. Diese Einschränkung verhindert eine unkomplizierte asynchrone Ausführung des Codes innerhalb des Einstiegspunkts der Anwendung.
Auflösung:
Mehrere Problemumgehungen ermöglichen asynchronen Operationen innerhalb der Methode Main
, abhängig von Ihrer Entwicklungsumgebung:
1. Visual Studio 2017 Update 3 und später:
moderne Versionen von Visual Studio (Update 2017 Update 3 und später) unterstützen direkt async
Main
Methoden. Ändern Sie einfach den Rückgabetyp Ihrer Main
-Methode in Task
oder Task<T>
:
<code class="language-csharp">class Program { static async Task Main(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
2. Blockieren des Hauptfadens (für ältere Visualstudios):
Wenn Sie eine ältere Visual Studio -Version verwenden, können Sie einen asynchronen Code ausführen, indem Sie den Haupt -Thread explizit blockieren, bis der asynchrone Vorgang abgeschlossen ist:
<code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
Dieser Ansatz nennt eine async
Helfer -Methode (MainAsync
) und verwendet GetAwaiter().GetResult()
, um auf die Fertigstellung zu warten.
3. Nutzung eines asynchronen Kontextes (z. B. Asyncex):
Für einen robusteren asynchronen Kontrollfluss sollten Sie eine Bibliothek wie Nito.AsyncEx
verwenden. Dies liefert einen asynchronen Kontext für Ihre Hauptschleife:
<code class="language-csharp">using Nito.AsyncEx; class Program { static void Main(string[] args) { AsyncContext.Run(() => MainAsync(args)); } static async void MainAsync(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
AsyncContext.Run
verwaltet die asynchrone Ausführung in einem speziellen Kontext.
Durch die Anwendung einer dieser Methoden können Sie die asynchrone Programmierung erfolgreich in die Main
-Methode Ihrer Konsolenanwendung integrieren und die Effizienz und Reaktionsfähigkeit verbessern.
Das obige ist der detaillierte Inhalt vonWarum kann ich den 'Async' -Modifikator für die Hauptmethode einer Konsolen -App nicht verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!