2017-12-04 31 views
-1

+=演算子を使用すると、アクションはを同期して実行しますかまたはを非同期に実行しますか?複数のアクションアサティンメントアディションは同期して実行されますか?

Action actions =() => Console.WriteLine("First Action"); 

actions +=() => Console.WriteLine("Second Action"); 
actions +=() => Console.WriteLine("Third Action"); 
actions +=() => Console.WriteLine("Fourth Action"); 

actions(); 

コードプリントのこのブロック:

First Action 
Second Action 
Third Action 
Fourth Action 
+0

アクションのための '+ ='はデリゲートと同じように機能します - それは段階的に実行される "リスト"の種類を作成します – VMAtm

答えて

2

このアクションはこれを行うだけで、同期的に実行されます:

Action actions =() => Console.WriteLine("First Action"); 

actions +=() => Console.WriteLine("Second Action"); 
actions +=() => { 
        Thread.Sleep(2000); 
        Console.WriteLine("Third Action") 
       }; 
actions +=() => Console.WriteLine("Fourth Action"); 
actions(); 

をそして、あなたは最後の1

を書くために待機しているスレッドをチェックすることができます
+0

どのように簡単です!ありがとう、男。それは本当に私を助けました。 – VitorCioletti

0

あなたの質問に対する答えは短くてシンプルです:行動はを同期して実行します。イベント・ハンドルと同様に、アクションは順次割り当てられている順序で順次実行されます。

気付いたことがあるように、ブロックはすべての文字列が順番に印刷されています。あなたはこのような何かを定義する場合:

Action actions =() => Console.WriteLine("2"); 
actions +=() => Console.WriteLine("3"); 
actions +=() => Console.WriteLine("1"); 
actions +=() => Console.WriteLine("4"); 

あなたはいつも2 3 1 4は関係なく、何が起こるか、印刷されないされて表示されます。

+0

ええ、私は複雑なものを実行すると、アクションが間違っていることが判明したことを非同期で実行する可能性があると考えました。 :) ありがとうございました!! – VitorCioletti

+0

サイドノートでは、内部の目的のためにこれを行うことは大事です。アクションのマルチスレッドサブスクリプションは予期しない結果を招く可能性があります。 APIコンシューマーにサブスクライブさせる場合も同じことが言えます。 –

関連する問題