C#4.0 Task.Factory.StartNewを使用して見たドキュメントのほとんどは、タスクの完了を待つために待機が必要です。しかし、私の最初のテストは、それが不必要であることを示しています。誰かが私にこれを確認することはできますか?私はなぜそんなにオンラインと印刷された参照があなたに待つ必要があると言うのは好奇心です。Task.Factory.StartNew()を使用した後にWait()が必要ですか?
ここには私がWaitステートメントが必要ないことを示す簡単なコンソールアプリケーションがありますので、コメントアウトしました。私がtsk.Wait()をコメントアウトするかどうかにかかわらず、出力は同じです。次のようにすべてのケースで
期待出力は次のとおりです。
Main thread starting. After running MyTask. The result is True After running SumIt. The result is 1 Main thread ending.
コード:
class Program
{
// A trivial method that returns a result and takes no arguments.
static bool MyTask()
{
Thread.Sleep(2000);
return true;
}
// This method returns the summation of a positive integer
// which is passed to it.
static int SumIt(object v)
{
int x = (int)v;
int sum = 0;
for (; x > 0; x--)
sum += x;
return sum;
}
static void Main(string[] args)
{
Console.WriteLine("Main thread starting.");
// Construct the first task.
Task<bool> tsk = Task<bool>.Factory.StartNew(() => MyTask());
// I found this Wait statement to be completely unnecessary.
//tsk.Wait();
Console.WriteLine("After running MyTask. The result is " +
tsk.Result);
// Construct the second task.
Task<int> tsk2 = Task<int>.Factory.StartNew(() => SumIt(1));
Console.WriteLine("After running SumIt. The result is " +
tsk2.Result);
tsk.Dispose();
tsk2.Dispose();
Console.WriteLine("Main thread ending.");
Console.ReadLine();
}
}
ありがとう、Timwi。私は脳のおならがあり、Taskの代わりにTaskを使用していることに気付かなかった。今それは意味をなさない! –
@ tambui:答えとしてマークするのはどうですか? – stackoverflowuser
@stackoverflowuser:申し訳ありませんが、方法を知らなかった。完了しました。 –