2
Microsoft hereのC#スレッディングタスク命令を使用しています。C#スレッディングタスクの明確化
彼らは最後の状態:
Resultプロパティ・ブロック呼び出し元のスレッドをタスクが終了するまで。
私は、これは関数のスレッドを作成しているにもかかわらず、メインスレッドと、呼び出し元関数の進行を保持していると考えていますか?それが作成し、同時に両方のスレッドを実行します
using System;
using System.Linq;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// Return a value type with a lambda expression
Task<int> task1 = Task<int>.Factory.StartNew(() => 1);
// Return a named reference type with a multi-line statement lambda.
Task<Test> task2 = Task<Test>.Factory.StartNew(() =>
{
string s = ".NET";
double d = 4.0;
return new Test { Name = s, Number = d };
});
int i = task1.Result;
Test test = task2.Result;
}
}
、返す前に、関数を使って実行されている:第二の問題として
、私は例のコードを変更した場合、私の可能性が間違った最初の仮定から続きます仕事?それとも、私が当初想定していたようにスレッドを1度進めていくのだろうか?
Microsoftの例では、本質的にそれらの関数を同期的に呼び出すことになります。あなたの例では、 'StartNew'を呼び出すと、同時に実行されます。両方が生成されると、メインスレッドは最初のスレッドが終了するのを待ってから、2番目のスレッドが終了してその順番で結果を収集します。 – hnefatl
ありがとう、それは完璧です、あなたは答えとしてそれを追加する必要があります:) – SoulRider