LoginSignup
2
5

More than 3 years have passed since last update.

C#学習 -非同期処理-

Last updated at Posted at 2019-07-17

C#学習中のため、学習内容をメモしていく。
間違いやアドバイスがあればコメントからよろしくお願いします。

Task処理

Task処理に関して少し勘違いしていたのでメモ

        void TaskSample()
        {
            Task.Run(() =>
            {
                HeavyMethod();
            });

            Console.WriteLine("おはよう");
        }

        void HeavyMethod()
        {
            // 重い処理
            Thread.Sleep(1000);
            Console.WriteLine("こんばんは");
        }

おはよう
こんばんは

別メソッドで非同期に動く処理はTask.Runで囲まれたHeavyMethodメソッドのみ。「おはよう」表示処理はHeavyMethodメソッド後に実行されると勘違いしていた。

「おはよう」表示を「こんばんは」より後にしたい場合は、HeavyMethodメソッドの終了を待つようにする。

        async Task TaskSample()
        {
            await Task.Run(() =>
            {
                HeavyMethod();
            });

            Console.WriteLine("おはよう");
        }

        void HeavyMethod()
        {
            // 重い処理
            Thread.Sleep(1000);
            Console.WriteLine("こんばんは");
        }
こんばんは
おはよう

HeavyMethodメソッドの戻り値を受け取りたいときはこうする。

        async Task TaskSample()
        {
            string str = await Task.Run(() => HeavyMethod());

            Console.WriteLine(str);
        }

        string HeavyMethod()
        {
            // 重い処理
            Thread.Sleep(1000);
            Console.WriteLine("こんばんは");

            return "こんにちは";
        }
こんばんは
こんにちは

string str = await Task.Run(() => { HeavyMethod(); });
{}をいれいると「型voidをstringに暗黙的に変換できません」とエラーになる。

参考した記事

おわり。

2
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5