public virtual DataEventArgs GetResult(DataEventArgs e) { DataEventArgs arg = new DataEventArgs(); try { var cts = new CancellationTokenSource(150000); while (!cts.Token.IsCancellationRequested) { if (ResultTask.TryGetValue(e.TaskId, out arg)) { arg.StatusCode = StatusCode.Success; Channels[arg.CallHashCode].ActiveHash = 0; try { StateObject oo = new StateObject(); RunStateObjects.TryRemove(arg.TaskId, out oo); oo.Builder.ReSet(); DataEventArgs outarg = new DataEventArgs(); ResultTask.TryRemove(arg.TaskId, out outarg); RuningTask.TryRemove(arg.TaskId, out outarg); } catch { } return(arg); } Thread.Sleep(3); } } catch (Exception ex) { arg.StatusCode = StatusCode.Serious; _log.Error(ex); Console.WriteLine(ex); Channels[e.CallHashCode].ActiveHash = 0; return(arg); } _log.Info(e.TaskId + "超时"); _timeoutTask.Add(e); e.StatusCode = StatusCode.TimeOut; return(e); }
public virtual DataEventArgs GetResult(DataEventArgs e) { DataEventArgs arg = new DataEventArgs(); try { var cts = new CancellationTokenSource(_config.GetValue("server", "timeout", 15) * 1000); while (!cts.Token.IsCancellationRequested) { if (ResultTask.TryGetValue(e.TaskId, out arg)) { arg.StatusCode = StatusCode.Success; Channels[arg.CallHashCode].ActiveHash = 0; try { StateObject oo = new StateObject(); RunStateObjects.TryRemove(arg.TaskId, out oo); if (oo != null) { oo.Builder.ReSet(); } DataEventArgs outarg = new DataEventArgs(); ResultTask.TryRemove(arg.TaskId, out outarg); RuningTask.TryRemove(arg.TaskId, out outarg); } catch (Exception ex) { Console.WriteLine(ex); } try { TaskTicks time = new TaskTicks(); if (RunTime.TryGetValue(arg.TaskId, out time)) { time.EndTime = DateTime.Now.Ticks; RunTime.TryUpdate(arg.TaskId, time, time); _log.Debug("RunTime:\r\n" + arg + "\r\n" + time + "\r\n"); } } catch (Exception ex) { Console.WriteLine(ex); } return(arg); } Thread.Sleep(3); } } catch (Exception ex) { arg.StatusCode = StatusCode.Serious; _log.Error(ex); Console.WriteLine(ex); Channels[e.CallHashCode].ActiveHash = 0; return(arg); } _log.Info(e.TaskId + "超时"); _timeoutTask.Add(e); e.StatusCode = StatusCode.TimeOut; return(e); }