お問い合わせ

tel:0570-046-503

営業時間 10:00~17:00(定休日:土日祝日)

Taskクラスを用いた非同期処理

   2015/08/04

.NetFramework4.0からTaskクラスを用いた

比較的簡単な非同期処理の実装が可能になりました。

.NetFramework5.0からはasync/await非同期メソッドを

用いた方法もありますが、

まずはTaskクラスを用いた方法をご紹介します。

            var t1 = Task.Factory.StartNew(() =>
            {
                method1();
            });
            var t2 = Task.Factory.StartNew(() =>
            {
                method2();
            });
            var t3 = Task.Factory.StartNew(() =>
            {
                method3();
            });
            var t4 = Task.Factory.StartNew(() =>
            {
                method4();
            });
            
            //タスクt2が終了するまで待つ
            t2.Wait();
            //タスクt2に関するUI操作を記述
            SetT2();

            t1.Wait();
            t3.Wait();
            t4.Wait();


キーワードとなるのがTask.Factory.StartNewです。

この中ラムダ式内で定義された処理が、即非同期タスクとして実行開始されます。

実行開始したタスクが終了するのを待つ場合は、wait()メソッドです。

今回は戻り値を持たないので、これだけで大丈夫です。

もしも、実行完了したタイミングで都度、タスク終了時の処理を行いたい場合は、

終了時のdelegateメソッドを定義してやる必要があります。

 

また、注意しなくてはいけないのは、非同期タスク内でUIの操作は出来ないと言う事です。

UI操作のためには、都度メインスレッドと同期してやる必要があるのですが、

ここではソースが複雑になりすぎるため、紹介しません。

少し時間のかかる、データ取得処理、計算処理などを同時に行う際には有効かと思われます。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)