C# 4 での非同期プログラミング async および await 非同期プログラム開発の事例分析

黄舟
リリース: 2017-09-16 11:19:49
オリジナル
1903 人が閲覧しました

C# 非同期プログラム開発シリーズが深まるにつれて、非同期プログラムの作成がどんどん簡単になっていくことがわかります。物事の発展はこのように単純なものから複雑なものへ、そして単純なものへと進みます。

C# 5.0 では、次のように async および await キーワードを使用して高速な非同期プログラム開発を実現できます:


        static void Main(string[] args)
        {            var task = GetResultAsyc();
            Console.WriteLine(String.Format("Main 线程:{0}", Thread.CurrentThread.ManagedThreadId));            
            for (int i = 0; i < 100; i++)
            {
                Console.Write(".");
                Thread.Sleep(10);
            }
            Console.WriteLine();
            Console.WriteLine(String.Format("Main 线程:{0},获取异步执行结果:{1}", Thread.CurrentThread.ManagedThreadId, task.Result));
            
            Console.ReadLine();
        }        private static async Task<int> GetResultAsyc()
        {
            Console.WriteLine(String.Format("线程:{0}", Thread.CurrentThread.ManagedThreadId));            
            var result = await Task.Run(() => {
                Console.WriteLine(String.Format("Task 线程:{0}", Thread.CurrentThread.ManagedThreadId));
                Thread.Sleep(5000);                return 10;
            });            return result;
        }
ログイン後にコピー

プログラムの説明:

1. async とマークされたメソッドを使用して、 できることを示します。 メソッドは非同期で呼び出されます。このメソッドの名前は Async で終わる必要があります。

2. 非同期メソッドの実行後に戻り値がある場合、非同期メソッドの戻り値の型は Task でなければなりません。戻り値がない場合はタスクである必要があります。

3. async でマークされたメソッドでは、Task を開始するか、呼び出し前に await を使用すると、呼び出し元のスレッドが直接戻り、後続のコードを実行します。 await の背後で呼び出されたプログラムは、1 つ以上の (ネストやその他の要因に応じて) 新しいスレッドで実行されます。

4. 新しいスレッドの関数が実行された後、戻り結果は新しいスレッドによって返されます (ここでは呼び出し元のスレッドに返されるのではなく、呼び出し元のスレッドによって取得された Task.Result を新​​しいスレッドが設定します)。 。

5. 呼び出しスレッドで await Task または Task.Result を使用すると、呼び出しスレッドは新しいスレッドが実行を完了して結果を取得するまで待機 (ブロック) します。

プログラムの出力は次のとおりです:

以前紹介したように、.Net Framework 4.5 以降の関連する IO、Net などはすべて、async および await 呼び出しをサポートします。上記のバージョンに基づくすべての C# 非同期プログラム開発になります。簡略化したもの。

現在、.Net Web 開発では、Web IO スループットの向上に役立つ非同期プログラミングが普及し始めています。

以上がC# 4 での非同期プログラミング async および await 非同期プログラム開発の事例分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート