タスク並列プログラミングのC#

1.タスクの作成

タスクを作成するには、2つの方法があり、一つは1工場を介して作成され、直接の作成が出て--newです。

        //最初の方法を作成し、直接インスタンス化
         するvarタスク1、タスク新しい新=(()=> 
         { 
            //もしTODOをコード
         })。
         task1.Start();

これは、あなたがそのコンストラクタはアクションで見ることができます作成​​する最も簡単な方法です。

        //第二の実施形態を作成し、工場が作成
         VAR Task.Factory.StartNew Task2の=(()=> 
         { 
            //もしTODOをコード
         })。

staticファクトリを通じてこのように、タスクおよび実行を作成するためです。

コンストラクタは、タスクを作成することで、手動で起動する必要があり、およびタスクによって直接作成された工場で開始しました。

 

2.タスクの短いライフサイクル(状態):

作成された:デフォルトの初期化タスクを示しますが、「作成された工場」の例がスキップします。

WaitingToRun:この状態は、タスクスケジューラを待っているスレッドが実行するタスクを割り当て表します。

RanToCompletion:タスクが終了します。

 

3.タスクミッション制御

タスクの最も魅力的な場所は、彼のミッションコントロールで、複数のタスクや整然とした作業するようにあなたも、タスクの実行順序を制御することができます。

Task.Waitは、    タスクの実行の完了を待つことです

Task.WaitAllが    実行されたすべてのタスクの完了を待つことです

Task.WaitAnyは、    任意のタスクの完了を下方に続くのを待つことです

Task.ContinueWithは、    最初のタスクは、タスクの継続を達成するために完了した後、自動的に次のタスクを開始することです

タスクのキャンセルは、  例えば、我々は、タスク、異常または[キャンセル]をクリックする立ち上げなど、私たちは、私たちは、タスクのトークンのキャンセルによりキャンセルする必要があり、このタスクをキャンセルしなければなりません。ループが含まれている身体の多くのタスクでは、我々は、ポーリング時間IsCancellationRequestedプロパティは、それがtrueの場合は、返すために、真であるかどうかを判定することができます。

         VAR tokenSource =新しいCancellationTokenSource(); 
         VARトークン= tokenSource。トークン ; 
         VARタスク= Task.Factory.StartNew(()=> 
         { 
            ため(VAR i = 0; iは<1000; I ++)
            { 
               System.Threading.Thread.Sleep(1000); 
               。IF(トークンIsCancellationRequested
               { 
                  Console.WriteLineを( "ミッションの成功を中止!"); を返す ; 
               } 
            } 
         }、トークン)。
         トークン。登録する(()=> 
            Console.WriteLineを() "キャンセル";
                   
         {
         }); 
         Console.WriteLineを(「を押してタスクをキャンセルするために入力して...」); 
         Console.ReadKey(); 
         tokenSource。キャンセル();
         Console.ReadKey();

ここでは、タスクを開き、トークン方式、出力メッセージを登録した後、ReadKeyは、ユーザーの入力を待って起動を実行するために、ユーザーがクリックを入力し、tokenSource.Cancel実行方法、タスクをキャンセルします。

 

4.タスク例外処理

     静的な無効メイン(文字列[] args)
      { 
         しようと
         { 
            (()=> VAR pTask = Task.Factory.StartNewを
            { 
               VAR cTask = Task.Factory.StartNew(()=> 
               { 
                  System.Threading.Thread.Sleep(2000) ; 
                  新しい例外をスロー( "cTaskエラーを!"); 
                  Console.WriteLineをは( "Childenタスクが終了!"); 
               }); 
               新しい例外(スロー) "pTaskエラーを!"; 
               Console.WriteLineをは( "親タスクが終了!"); 
            }); 

            pTask.Wait();EX)
         { 
            foreachの(ex.InnerExceptionsで内部例外)
            { 
               Console.WriteLineを(inner.Message)。
            } 
         } 
         Console.WriteLineを( "フラグ")。
         Console.Read(); 
      }
 

ここでAggregateExceptionと、真の例外情報をキャプチャするために、異常なコレクションです。

 

 

 

 

 

************************************************** ***
***どんなにあなたが行くどこまで、振り返ってみることも必要ありません。***
************************************************** ***

おすすめ

転載: www.cnblogs.com/gangle/p/11598364.html