1

我有计算 pi 的方法。我只是想知道是否可以使用 C#5 的 async/await 功能来加快速度?

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;
        }
4

2 回答 2

4

Async 和 await 最适合用于访问其他资源(如网络或硬盘驱动器),其中速度可能比您想要的慢。在像这样的纯处理器代码上使用它只会使您的代码与其余代码(启动此方法的原始调用代码)共享处理器,就像启动线程一样。要么是因为你的其他代码继续做事而减慢了速度,或者其他代码命中等待并继续,就好像它是同步的一样。使用 async/await 不会有太大的好处。

于 2012-08-31T13:54:27.927 回答
2

我不知道 PI 本身的计算是否正确,但你的算法不是多线程的好人选。

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

于 2012-08-31T13:56:49.587 回答