测量异步请求中的请求时间
Measuring request time in async requests
我需要 运行 多个网络请求并测量请求和相应响应之间的时间。
使用 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
方法。
如果全是代码,没有任何静态变量等,问题的原因可能是某个变量的闭包'watch'。表达式获取变量的第一个值,所有下一次都只使用这个值。
尝试通过 FromAsync 方法的第 3 个参数 'state' 发送变量值。
我需要 运行 多个网络请求并测量请求和相应响应之间的时间。
使用 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
方法。
如果全是代码,没有任何静态变量等,问题的原因可能是某个变量的闭包'watch'。表达式获取变量的第一个值,所有下一次都只使用这个值。 尝试通过 FromAsync 方法的第 3 个参数 'state' 发送变量值。