Hầu như tất cả tài liệu mà tôi đã thấy khi sử dụng C# 4.0 Task.Factory.StartMở trạng thái đó để đợi cho Tác vụ hoàn tất, bạn cần một Chờ. Nhưng thử nghiệm ban đầu của tôi cho thấy rằng nó là không cần thiết. Bất cứ ai khác có thể cho tôi xác nhận về điều này? Tôi tò mò là tại sao rất nhiều tài liệu tham khảo trực tuyến và in nói rằng bạn nên gọi Chờ.Chờ() cần thiết sau khi sử dụng Task.Factory.StartNew()?
Đây là một ứng dụng giao diện điều khiển đơn giản cho thấy rằng tôi không cần câu lệnh Chờ, vì vậy tôi đã nhận xét. Có hay không tôi nhận xét ra tsk.Wait(), đầu ra là như nhau.
sản lượng dự kiến trong mọi trường hợp như sau:
Main thread starting. After running MyTask. The result is True After running SumIt. The result is 1 Main thread ending.
Mã:
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();
}
}
Cảm ơn, Timwi. Tôi đã có một rắm não và không nhận thấy rằng tôi đã sử dụng Task thay vì Task. Bây giờ nó có ý nghĩa! –
@tambui: cách đánh dấu câu trả lời này như thế nào? – stackoverflowuser
@stackoverflowuser: Rất tiếc, không biết cách. Xong ngay. –