你知道为什么同步斐波那契方法比异步/等待更快,而异步任务更快吗?
我在每个项目方法中使用异步,所以这是一个不好的方法...
代码:
static int FibonacciSync(int number)
{
if (number == 0) { return 0; }
else if (number == 1) { return 1; }
else
{
var t1 = FibonacciSync(number - 1);
var t2 = FibonacciSync(number - 2);
return t1 + t2;
}
}
async static Task<int> FibonacciAwait(int number)
{
if (number == 0)
{ return 0; }
else if (number == 1)
{ return 1; }
else
{
var task1 = FibonacciAwait(number - 1);
var task2 = FibonacciAwait(number - 2);
return (await task1) + (await task2);
}
}
static Task<int> FibonacciAsync(int number)
{
if (number == 0)
{ return Task.FromResult(0); }
else if (number == 1)
{ return Task.FromResult(1); }
else
{
return FibonacciAsync(number - 1).ContinueWith(task1 =>
{
return FibonacciAsync(number - 2).ContinueWith(task2 =>
{
return task1.Result + task2.Result;
});
}).Unwrap();
}
}
结果:
- 同步: 00:00:00.0121900
- 等待: 00:00:00.2118170
- 异步: 00:00:02.6211660
await Task
带来了一些额外的开销:捕获上下文,将 lambda 分配给线程池,在上下文中进行切换。这是一种权衡。在您的情况下,额外的开销占优势。 - Dmitry Bychenkoreturn t1 + t2
不适合异步操作。 - Dour High Arch