オリジナル:https://blogs.msdn.microsoft.com/mazhou/2017/05/30/c-7-series-part-2-async-main/
あなたはおそらく知っている、C#言語では、2つの手順を構築することができます。一つは、オペレーティング・システムは、エントリポイントからプログラムをロードして実行することができるように、エントリーポイント(エントリーポイント)を有する手順であり、他のプログラム・エントリ・ポイントではありません。オペレーティングシステムは、直接ではなく可能なプログラム実行、プログラムコードは、その中に行うことができるように、他のプロシージャエントリポイントによって参照されてもよいです。
アプリケーションタイプのエントリポイントが存在する必要があります。Windowsは、アプリケーション、UWPアプリケーション、コンソールアプリケーション、WPFアプリケーション、ASP.NETフォーム。そして、ASP NET CoreアプリケーションとXamarianアプリケーションを。
エントリポイントの種類を必要としないアプリケーション:ライブラリ(/ T:LIB)、モジュール(/ T:モジュール)。
Mainメソッド
他の言語と同様に、C#のプログラムは、メインメソッドから始まります。有効な署名メイン方法であると考えられているオーバーロード4があります。
公共の 静的な 無効メイン(); 公共の 静的な int型のmain(); 公共の 静的な 無効メイン(文字列[] argsを)。 公共の 静的な int型メイン(文字列 [] argsを)。
C#のエントリポイントメソッドが静的である必要があり、メソッド名がメインでなければならない、メソッドの戻り値の型がvoidまたはint型であってもよいし、それは任意のコマンドライン引数を含むパラメータ文字列配列を持つことができます。
エントリポイント場合、メソッド戻りINT、オペレーティングシステム、またはこのエントリポイントを使用してプログラム評価プロセスは、戻り値、ネイティブ環境でホストすることができ開始:広く使用されている(例えば、(注釈と.NETホスティング環境対応)でのそれは)打ち上げ成功、外部アプリケーションを表します。
Mainメソッドを非同期
バージョン5.0は、非同期動作の流れを理解しやすいように、非同期/スタンバイモードではC#(.NETフレームワーク4.5)に導入されます。多くの(としても知られているもの非同期操作のために、既存のデザインの非同期プログラミングモデル)言語構造の新しい非同期/のawaitキーワードを使用することができます。今日では、多くのコミュニティが開発したライブラリは、OSの唯一の非同期バージョンを提供します。(例えば、System.Net.HttpClient、Microsoft.Azure.EventHub.Core。 )
(:C#7.1の以前のバージョンでは注釈)私はあなたのMainメソッドで非同期操作を待つようにしたい場合は、以下に定義のメインメソッドが無効なため、あなたは、いくつかの回避策を適用する必要があり、前述のように:
公共の 静的な 非同期タスクのメイン(文字列[] argsを) { await BuildWebHost(引数).RunAsync(); }
別のアプローチは、同期待ちの動作を使用することです。
公共の 静的な 無効メイン(文字列[] argsを) { BuildWebHost(引数).RunAsync()GetAwaiter()のgetResult()。。。 }
またはタスク待ち()メソッドの定義を呼び出します。
公共の 静的な 無効メイン(文字列[] argsを) { BuildWebHost(引数).RunAsync()(WAIT)。 }
C#はメインメソッドの有効な署名を拡張にC#7.1に有効なこれらのメインメソッドのオーバーロード非同期可能にします。
公共の 静的な 無効メイン(); 公共の 静的な int型のmain(); 公共の 静的な 無効メイン(文字列[] argsを)。 公共の 静的な int型メイン(文字列[] argsを)。 公共の 静的なタスクメイン(); 公共の 静的なタスク< 整数 > メイン(); 公共の 静的なタスクメイン(文字列[] argsを)。 公共の 静的なタスク< 整数 >メイン(文字列 [] argsを)。
クラスタスクの戻り値の型は、メインメソッドでのawaitキーワード非同期修飾子を達成することができます。
結論
エントリポイント法における主非同期メソッド、非同期動作は、他の非同期メソッドを実行するように、任意の回避策を使用することなく、使用が容易です。コードがコンパイルされると、非同期メイン方法がCLRであってもよい非同期メインメソッドを受ける非宿主としてパッケージされます。この新機能のCLRコードの変更を必要としないので、その非同期の主な方法は、実際には単なるシンタックスシュガーです。このデザインは、以前のバージョンの後端がC#と互換性があることができます。記事のソースコードリポジトリ:詳細を読むには、ロスリン(C#コンパイラ注釈)を参照してくださいAysncメイン。
シリーズ: