Compilerfehler CS4009
„Type.Method“: Ein Einstiegspunkt kann nicht mit dem async
-Modifizierer markiert werden.
Sie können das async
-Schlüsselwort nicht im Einstiegspunkt der Anwendung (in der Regel die Main
-Methode) verwenden.
Wichtig
Ab C# 7.1 kann die Main
-Methode über einen async
-Modifizierer verfügen. Weitere Informationen finden Sie unter Asynchrone Hauptrückgabewerte. Informationen zum Auswählen der C#-Sprachversion finden Sie im Artikel Auswählen der C#-Sprachversion.
Im folgenden Beispiel wird CS4009 erzeugt:
using System;
using System.Threading.Tasks;
public class Example
{
public static async void Main()
{
Console.WriteLine("About to wait two seconds");
await WaitTwoSeconds();
Console.WriteLine("About to exit the program");
}
private static async Task WaitTwoSeconds()
{
await Task.Delay(2000);
Console.WriteLine("Returning from an asynchronous method");
}
}
Aktualisieren Sie die C#-Sprachversion, die vom Projekt verwendet wird, auf Version 7.1 oder höher.
Wenn Sie C# 7.0 oder niedriger verwenden, entfernen Sie das async
-Schlüsselwort aus der Signatur des Anwendungseinstiegspunkts. Entfernen Sie außerdem alle await
-Schlüsselwörter, die Sie verwendet haben, um auf asynchrone Methoden im Einstiegspunkt Ihrer Anwendung zu warten.
Sie müssen jedoch immer noch warten, bis die asynchrone Methode abgeschlossen ist, bevor der Einstiegspunkt die Ausführung fortsetzt. Andernfalls generiert die Kompilierung die Compilerwarnung CS4014, und die Anwendung wird beendet, bevor der asynchrone Vorgang abgeschlossen ist. Dieses Problem wird anhand des folgenden Beispiels veranschaulicht:
using System;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Console.WriteLine("About to wait two seconds");
WaitTwoSeconds();
Console.WriteLine("About to exit the program");
}
private static async Task WaitTwoSeconds()
{
await Task.Delay(2000);
Console.WriteLine("Returning from an asynchronous method");
}
}
// The example displays the following output:
// About to wait two seconds
// About to exit the program
Um eine Methode abzuwarten, die einen Task zurückgibt, rufen Sie die Wait-Methode auf, wie im folgenden Beispiel veranschaulicht:
using System;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Console.WriteLine("About to wait two seconds");
WaitTwoSeconds().Wait();
Console.WriteLine("About to exit the program");
}
private static async Task WaitTwoSeconds()
{
await Task.Delay(2000);
Console.WriteLine("Returning from an asynchronous method");
}
}
// The example displays the following output:
// About to wait two seconds
// Returning from an asynchronous method
// About to exit the program
Um eine Methode abzuwarten, die einen Task<TResult> zurückgibt, rufen Sie wie im folgenden Beispiel den Wert ihrer Result-Eigenschaft ab:
using System;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Console.WriteLine("About to wait two seconds");
int value = WaitTwoSeconds().Result;
Console.WriteLine($"Value returned from the async operation: {value}");
Console.WriteLine("About to exit the program");
}
private static async Task<int> WaitTwoSeconds()
{
await Task.Delay(2000);
Console.WriteLine("Returning from an asynchronous method");
return 100;
}
}
// The example displays the following output:
// About to wait two seconds
// Returning from an asynchronous method
// Value returned from the async operation: 100
// About to exit the program
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben: