An entry point cannot be marked with the 'async' modifier

前端 未结 5 1808
甜味超标
甜味超标 2020-12-05 13:08

I copied below code from this link.But when I am compiling this code I am getting an entry point cannot be marked with the \'async\' modifier. How can I m

相关标签:
5条回答
  • 2020-12-05 13:21

    I'm using C# 8 and its working fine.

    static async Task Main(string[] args)
    {
       var response = await SomeAsyncFunc();
       Console.WriteLine("Async response", response);
    }
    

    OR without "await" keyword.

    static void Main(string[] args)
    {
       var response = SomeAsyncFunc().GetAwaiter().GetResult();
       Console.WriteLine("Async response", response);
    }
    
    0 讨论(0)
  • 2020-12-05 13:22

    Wrap your async code in MainAsync() - which is an async function
    then call MainAsync().GetAwaiter().GetResult();

    0 讨论(0)
  • 2020-12-05 13:26

    Starting from C# 7.1 there are 4 new signatures for Main method which allow to make it async(Source, Source 2, Source 3):

    public static Task Main();
    public static Task<int> Main();
    public static Task Main(string[] args);
    public static Task<int> Main(string[] args);
    

    You can mark your Main method with async keyword and use await inside Main:

    static async Task Main(string[] args)
    {
        Task<string> getWebPageTask = GetWebPageAsync("http://msdn.microsoft.com");
    
        Debug.WriteLine("In startButton_Click before await");
        string webText = await getWebPageTask;
        Debug.WriteLine("Characters received: " + webText.Length.ToString()); 
    }
    

    C# 7.1 is available in Visual Studio 2017 15.3.

    0 讨论(0)
  • 2020-12-05 13:36

    The error message is exactly right: the Main() method cannot be async, because when Main() returns, the application usually ends.

    If you want to make a console application that uses async, a simple solution is to create an async version of Main() and synchronously Wait() on that from the real Main():

    static void Main()
    {
        MainAsync().Wait();
    }
    
    static async Task MainAsync()
    {
        // your async code here
    }
    

    This is one of the rare cases where mixing await and Wait() is a good idea, you shouldn't usually do that.

    Update: Async Main is supported in C# 7.1.

    0 讨论(0)
  • 2020-12-05 13:38

    The difference between the code in the link's example and yours, is that you're trying to mark the Main() method with an async modifier - this is not allowed, and the error says that exactly - the Main() method is the "entry point" to the application (it's the method that is executed when your application starts), and it's not allowed to be async.

    0 讨论(0)
提交回复
热议问题