Błąd kompilatora CS4009
"Type.Method": nie można oznaczyć punktu wejścia modyfikatorem async
.
Nie można użyć async
słowa kluczowego w punkcie wejścia aplikacji (zazwyczaj Main
metody).
Ważne
Począwszy od języka C# 7.1, Main
metoda może mieć async
modyfikator. Aby uzyskać więcej informacji, zobacz Async main return values (Asynchroniczne główne wartości zwracane). Aby uzyskać informacje na temat wybierania wersji języka C#, zobacz artykuł Select the C# language version (Wybieranie wersji języka C#).
Poniższy przykład tworzy cs4009:
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");
}
}
Zaktualizuj wersję języka C# używaną przez projekt do wersji 7.1 lub nowszej.
Jeśli używasz języka C# 7.0 lub niższego, usuń async
słowo kluczowe z podpisu punktu wejścia aplikacji. Usuń również wszystkie await
słowa kluczowe, których użyto do oczekiwania na metody asynchroniczne w punkcie wejścia aplikacji.
Jednak nadal musisz poczekać na ukończenie metody asynchronicznej, zanim punkt wejścia wznowi wykonywanie. W przeciwnym razie kompilacja generuje ostrzeżenie kompilatora CS4014, a aplikacja zakończy się przed zakończeniem operacji asynchronicznej. Poniższy przykład ilustruje ten problem:
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
Aby oczekiwać na metodę zwracającą metodę Task, wywołaj jej Wait metodę, jak pokazano w poniższym przykładzie:
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
Aby zaczekać na metodę zwracającą Task<TResult>element , pobierz wartość jej Result właściwości, jak w poniższym przykładzie:
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
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię: