Theo số MSDN Documentation TaskFactory.StartNew, hãy tạo và bắt đầu Tác vụ. Vì vậy, đối với các mẫu mã dưới đâyTại sao TaskFactory.StartNew Task không bắt đầu ngay lập tức?
class Program
{
public static void Main()
{
var t =Task.Factory.StartNew(
() => SomeLongRunningCalculation(10, Display)
);
var t1 = Task.Factory.StartNew(
() => SomeLongRunningCalculation(20, Display)
);
Console.WriteLine("Invoked tasks");
Task.WaitAll(t, t1);
Console.ReadLine();
}
public static void Display(int value)
{
Console.WriteLine(value);
}
public static void SomeLongRunningCalculation(int j, Action<int> callBack)
{
Console.WriteLine("Invoking calculation for {0}", j);
System.Threading.Thread.Sleep(1000);
if (callBack != null)
{
callBack(j + 1);
}
}
}
kết quả mong muốn của tôi là
Invoking calculation for 10 Invoking calculation for 20 Invoked tasks 11 21
Tuy nhiên, nó được hiển thị
Invoked tasks Invoking calculation for 20 Invoking calculation for 10 21 11
Tôi muốn tìm hiểu
- Tại sao các tác vụ không chạy ngay sau StartNew?
- Tôi nên làm gì để có được kết quả theo định dạng mong muốn?
+1 để nêu rõ "Lập lịch trình chủ đề không xác định". – Ramesh