我正在測試異步/等待,這是問題所在。我正在異步啓動兩個任務並等待其執行完成。我期望這兩個任務等待相應的延遲,然後返回打印總毫秒數。但該計劃只打印1 start " + current time
和2 start " + current time
但之後沒有。我如何從推遲的任務中返回並打印最終結果?Task.Delay不返回主線程
static void Main(string[] args)
{
RunTasksWithDelays();
}
static async void RunTasksWithDelays()
{
Stopwatch s = Stopwatch.StartNew();
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Task task1 = LongRunningTask1();
Task task2 = LongRunningTask2();
await Task.WhenAll(task1, task2);
Console.WriteLine("total milliseconds elapsed: " + s.ElapsedMilliseconds/1000);
}
static async Task LongRunningTask1()
{
Console.WriteLine("1 start " + DateTime.Now);
await Task.Delay(5000);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("1 end " + DateTime.Now);
}
static async Task LongRunningTask2()
{
Console.WriteLine("2 start " + DateTime.Now);
await Task.Delay(2000);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("2 end " + DateTime.Now);
}
這有效。我知道我需要等待,但不知道如何在主內進行。 – Sam 2014-10-28 08:08:03
有沒有辦法知道在完整執行過程中產生了多少線程? – Sam 2014-10-28 08:57:43
@Sam不,沒有。操作本來可以完成,沒有任何單線程或N個線程。沒有辦法找出(AFAIK)。 – 2014-10-28 08:59:46