Kesalahan Kompilator CS4009
'Type.Method': titik entri tidak dapat ditandai dengan pengubah async
.
Anda tidak dapat menggunakan kata kunci async
di titik entri aplikasi (biasanya metode Main
).
Penting
Dimulai dengan C# 7.1, metode Main
dapat memiliki pengubah async
. Untuk informasi selengkapnya, lihat Nilai pengembalian utama asinkron. Untuk informasi tentang cara memilih versi bahasa C#, lihat artikel Memilih versi bahasa C#.
Contoh berikut menghasilkan 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");
}
}
Perbarui versi bahasa C# yang digunakan oleh proyek ke 7.1 atau lebih tinggi.
Jika Anda menggunakan C# 7.0 atau lebih rendah, hapus kata kunci async
dari tanda tangan titik entri aplikasi. Hapus juga kata kunci await
yang Anda gunakan untuk menunggu metode asinkron di titik entri aplikasi Anda.
Tetapi, Anda masih harus menunggu metode asinkron selesai sebelum titik entri Anda melanjutkan eksekusi. Jika tidak, kompilasi menghasilkan peringatan kompilator CS4014, dan aplikasi akan dihentikan sebelum operasi asinkron selesai. Contoh berikut menggambarkan masalah ini:
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
Untuk menunggu metode yang mengembalikan Task, panggil metode Wait, seperti yang digambarkan oleh contoh berikut:
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
Untuk menunggu metode yang mengembalikan Task<TResult>, ambil nilai properti Result, seperti yang dilakukan pada contoh berikut:
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
Umpan balik .NET
.NET adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: