Lezen in het Engels

Delen via


Compilerfout CS4009

'Type.Method': een toegangspunt kan niet worden gemarkeerd met de async wijzigingsfunctie.

U kunt het async trefwoord niet gebruiken in het toegangspunt van de toepassing (meestal de Main methode).

Belangrijk

Vanaf C# 7.1 kan de Main methode een async wijzigingsfunctie hebben. Zie de hoofdwaarde van Async voor meer informatie. Zie het artikel C#-taalversie selecteren voor informatie over het selecteren van de C#-taalversie .

Opmerking

In het volgende voorbeeld wordt CS4009 geproduceerd:

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

Deze fout corrigeren

Werk de C#-taalversie die door het project wordt gebruikt bij naar 7.1 of hoger.

Als u C# 7.0 of lager gebruikt, verwijdert u het async trefwoord uit de handtekening van het invoerpunt van de toepassing. await Verwijder ook trefwoorden die u hebt gebruikt om asynchrone methoden in uw toepassingsinvoerpunt te wachten.

U moet echter nog steeds wachten totdat de asynchrone methode is voltooid voordat het invoerpunt de uitvoering hervat. Anders genereert compilatie compilerwaarschuwing CS4014 en wordt de toepassing beëindigd voordat de asynchrone bewerking is voltooid. In het volgende voorbeeld ziet u dit probleem:

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

Als u wilt wachten op een methode die een Taskmethode retourneert, roept u de methode aan Wait , zoals in het volgende voorbeeld wordt geïllustreerd:

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

Als u wilt wachten op een methode die een Task<TResult>methode retourneert, haalt u de waarde van Result de eigenschap op, zoals in het volgende voorbeeld:

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

Zie ook