我有计算pi的方法。我只是想知道我是否可以使用C#5的异步/等待功能来加快速度?
public decimal CalculatePi(int measure)
{
var target = measure;
decimal current = 3;
var incrementing = false;
var inner = (decimal)1.0;
while (current < target)
{
if (!incrementing)
{
inner = inner - (1/current);
current += 2;
incrementing = true;
}
if (incrementing)
{
inner = inner + (1/current);
current += 2;
incrementing = false;
}
}
return 4*inner;
}
答案 0 :(得分:4)
最好在访问其他资源(如网络或硬盘驱动器,速度可能比您想要的速度慢)时使用Async和await。在像这样的纯处理器代码上使用它只会使你的代码与其余代码(启动此方法的原始调用代码)共享处理器,就像启动一个线程一样。要么是因为其他代码继续执行操作而放慢速度,要么其他代码等待并继续,就好像它是同步的一样。使用async / await没有什么大的好处。
答案 1 :(得分:2)
我不知道PI本身的计算是否正确,但您的算法不适合多线程。
实际上,您的算法是顺序的,代码非常小。上下文切换会增加很多开销,你将失去任何好处。