The Main method is the entry point of a C# application. When the application is started, the Main method is the first method that is invoked.
Main is declared inside a class or struct.static, and it need not be public.class or struct is not required to be static.Main method can be either void or int.Before C# 7.1, four overloaded versions were considered valid signatures for the Main method in C#, as shown below.
static void Main();
static int Main();
static void Main(string[] args);
static int Main(string[] args);
From C# 7.1, it is also possible to define the Main method as async with any of the following additional overloads.
static Task Main();
static Task < int > Main();
static Task Main(string[] args);
static Task < int > Main(string[] args);
An async Main method enables you to use await in your Main method. Before C# 7.1, when you want to call the async method from the Main method, you need to add some boilerplate code, as shown below.
static void Main(string[] args)
{
var helloWorld = GetHelloWorldAsync().GetAwaiter().GetResult();
Console.WriteLine(helloWorld);
}
static Task<string> GetHelloWorldAsync()
{
return Task.FromResult("Hello Async World");
}
Now in C# 7.1, the syntax is simpler and easy to use only using the async main.
static async Task Main(string[] args)
{
var helloWorld = await GetHelloWorldAsync();
Console.WriteLine(helloWorld);
}
static Task<string> GetHelloWorldAsync()
{
return Task.FromResult("Hello Async World");
}
If your program returns an exit code, you can declare a Main method that returns a Task<int>.
static async Task<int> Main()
{
// This could also be replaced with the body
// DoAsyncWork, including its await expressions:
return await DoAsyncWork();
}