使用异步加速PI计算?

时间:2012-08-31 13:49:22

标签: c# asynchronous async-await c#-5.0 pi

我有计算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;
        }

2 个答案:

答案 0 :(得分:4)

最好在访问其他资源(如网络或硬盘驱动器,速度可能比您想要的速度慢)时使用Async和await。在像这样的纯处理器代码上使用它只会使你的代码与其余代码(启动此方法的原始调用代码)共享处理器,就像启动一个线程一样。要么是因为其他代码继续执行操作而放慢速度,要么其他代码等待并继续,就好像它是同步的一样。使用async / await没有什么大的好处。

答案 1 :(得分:2)

我不知道PI本身的计算是否正确,但您的算法不适合多线程。

实际上,您的算法是顺序的,代码非常小。上下文切换会增加很多开销,你将失去任何好处。