メイン関数(エントリーポイント)を非同期にする

C# バージョン7.1からエントリーポイントも非同期にできる

以前なら static async Task Main はエントリーポイントとみなされずビルドエラーが発生しました。
C# 7.1 なら エントリーポイントを非同期処理にすることができます。

Main 関数が非同期にできる為、そのまま非同期メソッドを await で呼ぶことができます。

using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace AsyncMainSample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // Mian 関数で非同期メソッドを await で呼べる
            string doc = await GetMSDocAsync();
            Console.WriteLine(doc);
        }

        // 非同期メソッド
        static async Task<string> GetMSDocAsync() => 
            await new HttpClient().GetStringAsync(@"https://docs.microsoft.com/ja-jp/");
    }
}

今までもAsyncMethod().GetAwaiter().GetResult(); と呼ぶことができましたがこっちのほうが綺麗です。

使うには C# の言語バージョンを7.1以上に設定する

非同期のメインメソッドがサポートされるのは C# 7.1 以上なので言語バージョンを7.1以上に設定する必要があります。

Visual Studio のビルドの詳細設定を開きます。
ソリューションエクスプローラー > プロジェクトを右クリック > プロパティ > ビルド > 詳細設定

言語バージョンC# 7.1 以上に設定します。

image.png

読んでいただきありがとうございました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.