Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }