4

Lambda式の一般的な理解はありますが、() =>構文の意味がわかりません。このコードはタスクアイテムのリストを返すように見えますが、それがどのように実行されるか、またはそれが何を意味するかをどのように解釈するかがわかりません。

誰か教えてもらえますか:

  1. どういう() =>意味ですか?
  2. new Taskブロックが順番に実行されているように見えますか?
 private DateTime? _myTime = null;
 private DateTime? _theirTime = null;
 private bool _okToProcess = true;

 List<Task> myTasks = new List<Task>
            {
                   new Task( () => 
                    {
                        _myTime = GetMyTime();
                    }),

                     new Task( () => 
                    {
                        _theirTime = GetTheirTime(); 
                        _okToProcess = _myTime > _theirTime;                                         
                    }),

                new Task(() => 
                    {
                        if (_okToProcess)
                        {
                           WriteToMyLogStep("We are processing");
                        }
                        else
                        {
                           WriteToMyLogStep("We are NOT processing");
                        }
                     });
            };
4

7 に答える 7

4

()-匿名メソッドによって取得されたパラメータを表します。

=>-通常、これらのパラメータを使用する匿名メソッド本体(提供されている場合)を参照して参照します

あなたの場合、lamda式は次と同じです。

 delegate() {  _myTime = GetMyTime(); }

リストに追加されたばかりのタスクについては、実行されません。それらがどのように実行されるかは、将来どのように実行するかによって異なります。(同じスレッドまたは異なるスレッドのループにある可能性があります)。

于 2013-02-22T16:36:36.440 に答える
4

構文は() =>、ラムダへの名前付き入力がないことを意味します。これは、パラメーターを受け取らないメソッドを呼び出すようなものです。

コードに関しては、タスクは作成されたばかりですが、実際には開始されないため、示されているコードでは実行されません。リストが列挙され、タスクが別の場所で開始されたと思います。

于 2013-02-22T16:37:38.457 に答える
2

おそらく、のようなラムダ関数を目にすることに慣れているでしょうx => DoSomething(x)。これは実際には省略形です(x) => DoSomething(x)。イニシャルは、 in(x)と同じように、関数のパラメーターを表します。します。(x)DoSomething(x)

この場合、パラメータがないため()、通常の関数と同じように、を使用しますDoSomething()

sについてはTask、次の開始前にそれぞれが完了するまで明示的に待機しない限り、開始後に並行して実行されます。

于 2013-02-22T16:38:58.333 に答える
0

()は関数が取るパラメータに似ており、タスクは非同期で実行されると思います=>関数の本体を指します

于 2013-02-22T16:38:04.867 に答える
0
  1. 実行される匿名のアクション。
  2. タスクは定義されているだけで、実行されていません。
于 2013-02-22T16:38:51.363 に答える
0

()=>Action-パラメータのない式です。

これらのタスクは開始されていないため、(現在)完了することはありません...

于 2013-02-22T16:39:02.713 に答える
0
  1. ()=>は、演算子に続いて無名関数に渡されるパラメーターのリストです(この場合は空またはなし) 。は=>ラムダ計算からその名前を取得します。

  2. これは、リスト内のタスクをどのように呼び出しているかによって異なります。これは単にList<Task>タスクが含まれているだけです。タスクを実行するには、次のようなことを行う必要があります。

    foreach (Task t in myTasks) {
        t.RunSynchronously();  // in this case the tasks would run synchronously
    }
    
于 2013-02-22T16:39:19.660 に答える