public async Task <IApiResult <string> > Hello(string name, int count, Guid guid, byte[] file, long id = -1, Em em = Em.Test) { var test3 = DependencyHelper.GetService <TestObject>(); var test2 = DependencyHelper.GetService <ITest>(nameof(TestObject)); var ctx = context = GlobalContext.Current; await Debug(1, context, context); ScopeRuner.RunScope("Hello2", Hello2); await Debug(1, ctx, GlobalContext.Current); if (DateTime.Now.Ticks % 13 == 11) { Logger.Exception(new Exception("故意的")); } if (DateTime.Now.Ticks % 23 == 19) { Logger.Error("故意的"); } if (DateTime.Now.Ticks % 67 == 57) { Logger.Log(LogLevel.Critical, "故意的"); } return(ApiResultHelper.Helper.Succees($"name:{name} count:{count} guid:{guid} file:{file} id:{id} em:{em}")); }
/// <summary> /// 关闭 /// </summary> public static async Task Shutdown() { if (ZeroAppOption.Instance.ApplicationState >= StationState.Closing) { return; } DateTime start = DateTime.Now; double sec; int cnt = 0;; Logger.Information($"【等待结束】剩余请求数:({ZeroAppOption.Instance.RequestSum})..."); while (ZeroAppOption.Instance.RequestSum > 0) { cnt++; sec = (DateTime.Now - start).TotalSeconds; if (sec > ZeroAppOption.Instance.MaxCloseSecond) { Logger.Error($"{cnt}. 已等待{sec:F2}秒,虽然剩余请求数还有{ZeroAppOption.Instance.RequestSum}),但已超过最大等待时间({ZeroAppOption.Instance.MaxCloseSecond}秒),系统将强行关闭。"); break; } Logger.Information($"{cnt}. 已等待{sec:F2}秒,剩余请求数:{ZeroAppOption.Instance.RequestSum}..."); await Task.Delay(50); } sec = (int)(DateTime.Now - start).TotalSeconds; if (sec > 0) { Logger.Information($"{cnt}. 等待{sec:F2}秒后请求全部结束."); } Logger.Information("【正在退出...】"); ZeroAppOption.Instance.SetApplicationState(StationState.Closing); await CloseAll(); if (ZeroAppOption.Instance.ApplicationState != StationState.Closing) { return; } await WaitAllObjectSafeClose(); ZeroAppOption.Instance.SetApplicationState(StationState.Closed); await DestoryAll(); ZeroAppOption.Instance.SetApplicationState(StationState.Destroy); ScopeRuner.DisposeLocal(); DependencyHelper.LoggerFactory.Dispose(); Logger.Information("【已退出,下次见!】"); if (ZeroAppOption.Instance.IsDevelopment) { Process.GetCurrentProcess().Kill(); } }
async Task Hello2() { await Debug(2, context, GlobalContext.Current); context = GlobalContext.Current; await Task.Yield(); await Task.Delay(100); await Debug(2, context, GlobalContext.Current); await Hello3(); await Debug(2, context, GlobalContext.Current); ScopeRuner.DisposeLocal(); }
private void OnReceive(SessionReceiveEventArgs e) { TcpOption.Instance.ConcurrencySemaphore.Wait(); var pipeStream = e.Stream.ToPipeStream(); if (!pipeStream.TryReadLine(out var message) || message == null) { return; } message = message.Trim('\0').Trim(); if (message.IsBlank()) { return; } ScopeRuner.RunScope("TcpHandler", OnMessage, (message, e.Session)); }
/// <summary> /// 消息处理(异步) /// </summary> /// <param name="service">服务</param> /// <param name="message">消息</param> /// <param name="offline">是否离线消息</param> /// <param name="original">原始透传对象</param> public static Task OnMessagePush(IService service, IInlineMessage message, bool offline, object original) { ZeroAppOption.Instance.BeginRequest(); message.RealState = MessageState.Recive; var process = new MessageProcessor { Service = service, Message = message, Original = original, IsOffline = offline, WaitTask = new TaskCompletionSource <bool>() }; ScopeRuner.RunScope($"{message.Service}/{message.Method}", process.Process, ContextInheritType.Clone); return(process.WaitTask.Task); }
/// <summary> /// 消息处理(异步) /// </summary> /// <param name="service">服务</param> /// <param name="message">消息</param> /// <param name="offline">是否离线消息</param> /// <param name="original">原始透传对象</param> public static void RunOnMessagePush(IService service, IInlineMessage message, bool offline, object original) { if (!ZeroAppOption.Instance.BeginRequest()) { message.RealState = MessageState.Cancel; return; } message.RealState = MessageState.Recive; var process = new MessageProcessor { Service = service, Message = message, Original = original, IsOffline = offline }; ScopeRuner.RunScope($"{message.Service}/{message.Method}", process.Process, ContextInheritType.Clone); }