private async void RunAsync() { Console.WriteLine(string.Format("start run case [{0}]", _caseId)); if (_aswClient == null || _restClient == null) { return; } while (true) { _currentJob = await _aswClient.GetJob(_caseId, _preJob); Logger.Info(string.Format("got job {0}[{1}]:{2}", _currentJob?.Code, Index, _currentJob?.Name)); if (_currentJob == null) { _aswClient.Report(_caseId); return; } while (_currentJob.JobType != JobTypes.Finish) { //Console.WriteLine(string.Format("[{0} {1}]", _currentJob.Name, _currentJob.Code)); _currentJob.JobResult = DoJob(_currentJob); _preJob = _currentJob; //update //_aswClient.Report(_caseId); if (_currentJob.JobResult != JobResults.RepeatNeeded) { //out of loop Console.WriteLine(string.Format("{0:HH:mm:ss}-{1}[{2}]:{3}|{4}", DateTime.Now, _currentJob.Code, Index, _currentJob.Name, _currentJob.JobResult)); break; } // //await Task.Delay(_currentJob.RepeatInterval); Console.WriteLine(string.Format("{0:HH:mm:ss}-{1}[{2}]:{3}|{4}", DateTime.Now, _currentJob.Code, Index, _currentJob.Name, _currentJob.JobResult)); } } }
public JobResults DoJob(WebRequestJob job) { _restClient.BaseUrl = new Uri(job.BaseUrl); var request = new RestRequest(job.Resource, job.Method); string respContent = null; try { //header foreach (var h in job.Headers) { request.AddHeader(h.Key, h.Value); } //parameters foreach (var p in job.Parameters) { request.AddParameter(p.Key, p.Value); } _stopWatch.Restart(); IRestResponse response = _restClient.Execute(request); _stopWatch.Stop(); Logger.Req(string.Format("REQUEST SPEND {0}ms, {1}", _stopWatch.ElapsedMilliseconds, response.StatusDescription)); if (response.ResponseStatus == ResponseStatus.TimedOut) { Console.WriteLine("Response Time Out, retry"); Logger.Info("Response Time Out"); return JobResults.RepeatNeeded; } else if (response.ResponseStatus == ResponseStatus.Error) { Console.WriteLine("Response Error, retry after 5 secs"); Logger.Info("Response Error, retry after 5 secs"); Task.Delay(5000); return JobResults.RepeatNeeded; } else { respContent = response.Content; } return job.Do(respContent); } catch (Exception ex) { Logger.Error(ex.Message); return JobResults.Excepted; } }