İngilizce dilinde oku

Aracılığıyla paylaş


Derleyici Hatası CS4009

'Type.Method': Bir giriş noktası değiştirici ile async işaretlenemez.

Anahtar sözcüğünü async uygulama giriş noktasında (genellikle yöntemi) Main kullanamazsınız.

Önemli

C# 7.1'den başlayarak yöntemin Main değiştiricisi async olabilir. Daha fazla bilgi için bkz . Zaman uyumsuz ana dönüş değerleri. C# dil sürümünü seçme hakkında bilgi için C# dil sürümünü seçme makalesine bakın.

Örnek

Aşağıdaki örnek CS4009 üretir:

C#
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");
    }
}

Bu hatayı düzeltmek için

Proje tarafından kullanılan C# dil sürümünü 7.1 veya üzeri bir sürüme güncelleştirin.

C# 7.0 veya üzerini kullanıyorsanız, uygulama giriş noktasının imzasından anahtar sözcüğünü kaldırın async . Ayrıca, uygulama giriş noktanızda zaman uyumsuz yöntemleri beklemek için kullandığınız tüm await anahtar sözcükleri kaldırın.

Ancak, giriş noktanız yürütmeye devam etmeden önce zaman uyumsuz yöntemin tamamlanmasını beklemeniz gerekir. Aksi takdirde derleme, derleyici uyarısı CS4014 oluşturur ve uygulama zaman uyumsuz işlem tamamlanmadan sonlandırılır. Aşağıdaki örnekte bu sorun gösterilmektedir:

C#
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

döndüren bir Taskyöntem beklemek için aşağıdaki örnekte gösterildiği gibi yöntemini çağırın Wait :

C#
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

döndüren Task<TResult>bir yöntemi beklemek için, aşağıdaki örnekte olduğu gibi özelliğinin Result değerini alın:

C#
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

Ayrıca bkz.