3
task.ContinueWith( x => Process(x));

task.ContinueWith( Process)

なぜ両方が機能するのか疑問に思っています。

ContinueWith には Task の少なくとも 1 つのパラメーターが必要だと思いました

4

4 に答える 4

5

ラムダ式はメソッドグループに変換されています。

13.6メソッドグループの変換

§13.5で説明されている暗黙的な匿名メソッド変換と同様に、メソッドグループ(§14.1)から互換性のあるデリゲートタイプへの暗黙的な変換が存在します。Dがデリゲート型であり、Eがメソッドグループとして分類される式である場合、Eが通常の形式(§14.4.2.1)で適用可能なメソッドを少なくとも1つ含む場合に限り、DはEと互換性があります。 Dのパラメータータイプと修飾子に一致するタイプと修飾子を持つ引数リスト(§14.4.1)。

EからDへの変換のコンパイル時のアプリケーションは、デリゲート作成式new D(E)(§14.5.10.3)のコンパイル時の処理と同じです。EからDへの暗黙の変換の存在は、適用可能なメソッドのセットが空ではないことを示しているだけであり、変換のコンパイル時の適用がエラーなしで成功することを保証するものではないことに注意してください。

例については、 http://en.csharp-online.net/ECMA-334:_13.6_Method_group_conversionsを参照してください。

于 2012-10-13T00:12:35.737 に答える
0

これらの2行は本質的に同じものです。下の方はメソッド呼び出しであり、その上のラムダ式はちょうど同様のメソッド呼び出しに変換されています。同じことですが、表現が異なります。

于 2012-10-13T00:13:44.680 に答える
0

asパラメータをContinueWith期待し、適切な署名と。を持っているためです。Action<Task>Process(x) => Process(x)

于 2012-10-13T00:15:52.443 に答える
0

x => Process(x)はデリゲートを作成しています。

デリゲートは、メソッドを参照する型です。

タスクは非同期操作を表します。

アクションは一種の委任です。

于 2012-10-13T00:16:12.093 に答える