衡量异步请求中的请求时间

时间:2016-01-27 13:44:47

标签: asynchronous httpwebrequest benchmarking stopwatch

我需要运行多个Web请求并测量请求和相应响应之间的时间。

使用BackgroundWorker的现有代码和使用TPL库的新代码的两个解决方案都存在我无法理解的以下问题:

var watch = Stopwatch.StartNew();

queue.Enqueue(Task.Factory
                    .FromAsync<WebResponse>(webRequest.BeginGetResponse, webRequest.EndGetResponse, null)
                    .ContinueWith(task =>
                    {
                        using (var response = (HttpWebResponse)task.Result)
                        {
                            // Stopwatch shows wrong results
                            // After multiple request watch.Elapsed time arrives 10 seconds
                            // This is wrong be
                            // The same code running in Console Application works corectly
                            Debug.WriteLine("{0}\t{1}\t{2}", response.StatusCode, response.ContentType, watch.Elapsed);

                            // This lines are only in production WiForms app
                            if (EventWebRequestFinished != null)
                            {
                                // Update WinForm GUI elements (add to listboc)
                            }
                        }
                    },

同样的问题我也使用DateTime.Now方法。

1 个答案:

答案 0 :(得分:1)

如果它是所有代码,没有任何静态变量等,则问题的原因可能是关闭变量&#39; watch&#39;。表达式获取变量的第一个值,所有下一次只使用此值。 尝试通过第三个参数&#39; state&#39;发送变量值FromAsync方法。