我想學習如何併發添加一些同步程序,並採取斐波那契算法爲例。我編寫了這些代碼,但是我發現它沒有任何併發性。所有代碼在單個線程中運行直到完成。任何人都可以向我解釋爲什麼它不反映異步?如何用C#異步併發添加到同步程序/等待
async static Task<int> Fibonacci(int n)
{
if (n == 0) { return 0; }
else if (n == 1) { return 1; }
else
{
var t1 = Fibonacci(n - 1);
var t2 = Fibonacci(n - 2);
return (await t1) + (await t2);
}
}
static int Main(string[] args)
{
var fib = Fibonacci(25);
fib.Wait();
Console.WriteLine(fib.Result);
Console.ReadKey();
return 0;
}
在邁克爾的提示下,我嘗試在異步函數創建任務,和它的作品。 但我注意到一個異步函數返回一個Task類型值,它與Task.Run()相同。這兩個任務都將立即運行,但t1不會自動運行到新線程。 所以任何人都可以告訴我,這兩個任務有什麼不同。我可以使異步函數自動運行到新線程嗎?
async static Task<string> Async1()
{
return DateTime.Now.ToString();
}
static void Main(string[] args)
{
Task<string> t1 = Async1();
Task<string> t2 = Task.Run<string>(() => { return DateTime.Now.ToString(); });
}
你是什麼意思它沒有反應?當你運行你的程序時會發生什麼? – gideon 2012-04-20 12:08:03
你如何期待它作出反應? – 2012-04-20 12:11:36
我希望你知道這是一個非常低效的算法(提示:計算fib(20)的計算頻率)?好吧,測試異步工作很好(需要很長時間:-))。 – 2012-04-20 12:12:07