Heim >Backend-Entwicklung >C++ >Wie kann ich einen asynchronen Code in der Hauptmethode einer C# -Konsole -Anwendung ausführen?

Wie kann ich einen asynchronen Code in der Hauptmethode einer C# -Konsole -Anwendung ausführen?

Barbara Streisand
Barbara StreisandOriginal
2025-02-01 17:11:09649Durchsuche

How Can I Run Asynchronous Code in a C# Console Application's Main Method?

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:

zurückzugeben
<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn