Chyba kompilátoru CS4009
'Type.Method': Vstupní bod nelze označit modifikátorem async
.
Klíčové slovo nelze použít async
v vstupním bodě aplikace (obvykle metodu Main
).
Důležité
Počínaje jazykem C# 7.1 Main
může async
mít metoda modifikátor. Další informace najdete v tématu Asynchronní hlavní návratové hodnoty. Informace o tom, jak vybrat jazykovou verzi jazyka C#, najdete v článku o výběru jazykové verze jazyka C#.
Následující příklad vytvoří 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");
}
}
Aktualizujte jazykovou verzi jazyka C# používanou projektem na verzi 7.1 nebo vyšší.
Pokud používáte C# 7.0 nebo nižší, odeberte async
klíčové slovo z podpisu vstupního bodu aplikace. Odeberte také všechna await
klíčová slova, která jste použili k očekávání asynchronních metod v vstupním bodu aplikace.
Přesto ale musíte počkat, až se asynchronní metoda dokončí, než vstupní bod obnoví provádění. Jinak kompilace generuje upozornění kompilátoru CS4014 a aplikace se ukončí před dokončením asynchronní operace. Následující příklad ukazuje tento problém:
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
Pokud chcete očekávat metodu, která vrací metodu Task, zavolejte její Wait metodu, jak ukazuje následující příklad:
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
Chcete-li očekávat metodu, která vrací Task<TResult>, načtěte hodnotu jeho Result vlastnosti, jak je znázorněno v následujícím příkladu:
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
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: