1

MSDN のオンライン記事「方法: 1 つまたは複数のタスクが完了するのを待つ」には、次のコードがあります。

// Try three different approaches to the problem. Take the first one
tasks2[0] = Task<double>.Factory.StartNew(() => TrySolution1());
tasks2[1] = Task<double>.Factory.StartNew(() => TrySolution2());
tasks2[2] = Task<double>.Factory.StartNew(() => TrySolution3());

3 つの異なるメソッドを呼び出します。これらはすべて、まったく同じ本体を持ち、まったく同じことを行います。

static double TrySolution1()
//static double TrySolution2()
//static double TrySolution3() 
{
   int i = rand.Next(1000000);
   // Simulate work by spinning
   Thread.SpinWait(i); 
   return DateTime.Now.Millisecond;
}   

これらの複数の重複した認識が何を示しているのか理解できませんか?

1つの方法を使用する場合の違いは何ですか

tasks2[0] = Task<double>.Factory.StartNew(() => TrySolution1());
tasks2[1] = Task<double>.Factory.StartNew(() => TrySolution1());
tasks2[2] = Task<double>.Factory.StartNew(() => TrySolution1());

?

4

2 に答える 2

3

これにより、1 つの方法を使用して同じ答えが得られます。この例は、その点で「悪い例」です。そうは言っても、これは問題に対処する方法の単なる例であり、使用する「実際のコード」ではありません。

その背後にある考えは、複数の別々のメソッド (もちろん、通常は別の方法で実装されます) を使用する方法を示し、どれが最初に終了したかを判断することだったと思います。各メソッドに異なる実装を使用した場合、この例はより明確になると思いますが、示されている概念は同じです。

于 2013-03-30T01:27:02.443 に答える
1

これは、何かを実行する方法のサンプルです。ほとんどのサンプル コードをリファクタリングしようとすると、常に に近いものになりreturn 0;ます。

この特定のケースでは、いくつかの異なるものを持っている場合、1 つだけの競争を待つことができることを示しています。関数がどのように実装されているかは無視してください。これはサンプルが示すものではありません (混乱する場合は、各関数の独自の実装を作成してください)。

于 2013-03-30T01:26:51.443 に答える