2016-01-27 2 views
-1

Мне нужно запустить несколько веб-запросов и измерить время между запросом и соответствующим ответом.Время запроса измерения в async-запросах

Оба решения с существующим кодом, используя 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

Если это все код, без каких-либо статических переменных и т. Д., Причиной проблемы может быть закрытие переменной 'watch'. Выражение получает первое значение переменной, и все последующие значения используют только это значение. Попробуйте отправить значение переменной через 3-й параметр «состояние» метода FromAsync.

+0

У меня такая же проблема. – hellboy

+0

Я пытаюсь в данный момент с помощью 'Thread.Sleep (..)' – hellboy