我有兩個任務Job1和Job2及以下是代碼。我第一次按順序運行Job1和Job2,得到秒錶輸出爲844毫秒。第二次,我評論了順序作業並稱爲並行任務處理,並將秒錶結果取爲11352毫秒。我的假設/期望是我應該得到的輸出爲422(因爲844/2)或某個接近它的地方。但結果完全相反。我需要等待兩項工作完成,因此我把t1.Wait()和t2.Wait();請幫助我在半個連續處理中處理這兩個作業。請在下面找到我的代碼:c中的異步任務#
public ActionResult Index()
{
Stopwatch s = new Stopwatch();
s.Start();
//Execute 2 jobs in a sequence
Job1();
Job2();
//Execute 2 jobs in parallel
//var t1 = Task.Run(() => { Job1(); });
//var t2 = Task.Run(() => { Job2(); });
//t1.Wait();
//t2.Wait();
s.Stop();
Debug.WriteLine("ElapsedMilliseconds: " + s.ElapsedMilliseconds);
return View();
}
private void Job1()
{
for (int i = 0; i < 1000; i++)
{
Debug.WriteLine(i);
}
}
private void Job2()
{
for (int i = 2000; i < 3000; i++)
{
Debug.WriteLine(i);
}
}
開始任務可能非常耗時。你必須考慮這個開銷。如果引入並行性,您可能永遠無法讓您的兩項任務更快。 – Enigmativity
Debug.WriteLine可能具有鎖定/同步代碼,導致很多的阻止和啓動可能? http://stackoverflow.com/questions/2759301/debug-writeline-locks這表明它。嘗試使用Thread.Sleep的過程或者更簡單的測試時間。 –
放一個線程。在Job1和Job2中睡眠約1000毫秒,你會發現你實際上是在調用這兩種方法,但總是會有引入併發症的開銷,並且由於這種操作與你正在做的操作類型一起可能無法獲得預期結果。 – Daniel