1

ライブラリ内でメソッド「Foo(object s, Action action)」を呼び出しています。関数自体にはある程度の実行時間が含まれるため、CountDownEvents を使用して、関数がジョブを完了したときに通知します。

何かのようなもの、

countdownEvent.Reset();


try
 {
     Foo(obj, ()=> countdownEvent.Signal());
 }
 catch(Exception e)
 {
    countdownEvent.Signal();
 }
 countdownEvent.Wait();

私が理解していない部分は

  1. () => countdownEvent.Signal() とはどういう意味ですか? 特に「()=>」は何の略ですか?
  2. メソッドのシグネチャが Foo(object s, CountDownEvent event) と書かれておらず、内部でシグナルを送ることができるのはなぜですか?
  3. 私はまだActionクラスを本当に理解していません。少しグーグルで検索しましたが、開始するための非常に単純な例が見つかりません。

どんな助けでも大歓迎です!

4

3 に答える 3

3

() => countdownEvent.Signal()ラムダ式です。

この特定の状況では、パラメーターをとらず、 と同じ戻り値の型を持つある種の匿名メソッドがありますcountdownEvent.Signal()

于 2013-07-18T06:20:45.487 に答える
2
  1. () =>はラムダ構造です ( C# Lambda ( => )を参照)。ラムダ式を使用すると、引数として渡すことができる、または関数呼び出しの値として返すことができるローカル関数を作成できます。ラムダ式は、LINQ クエリ式を記述する場合に特に役立ちます。ただし、これを使用して、あらゆる種類のデリゲート実装を記述することができます。
  2. 表示されている方法で同じコードを指定できますが、Action を使用するとより柔軟になります。最初のケースでは、動作が宣言された特定の関数です。2 つ目は、プログラムのロジックに従って変更できるアクティビティです。
  3. アクションは単なるデリゲートであり、動的な動作を宣言しています。パラメータを持ち値を返さないメソッドをカプセル化します。パラメーターを持ち、 valueを返すメソッドを参照するには、代わりにジェネリック Func デリゲートを使用します。クラスが何らかの動作を期待しており、クラスの消費者にこの動作を独自に宣言させたい場合によく使用されます。

更新: VikciaR のコメントによると

于 2013-07-18T06:21:22.270 に答える
1
  1. これがラムダ式と呼ばれるものです。単純なインライン メソッドと見なすことができます。()=> は、このメソッドにパラメーターがないことを意味します。(string x)=> 意味 - 1 つのパラメーター。
  2. イベントとラムダ式は似た概念です (ラムダ式はデリゲートから進化したものです)。ここを読んでください。
  3. MSDNは最高です :-)
于 2013-07-18T06:26:33.130 に答える