/// <summary> /// 任务设置行为 /// </summary> /// <param name="table">任务列表</param> /// <param name="id">任务id</param> /// <param name="timeout">超时时间</param> public TaskSetAction(TaskSetActionTable table, long id, TimeSpan timeout) { this.Id = id; this.ValueType = typeof(T); this.table = table; this.taskSource = new TaskCompletionSource <T>(); this.timer = new Timer(this.OnTimerCallback, null, timeout, TimeSpan.FromMilliseconds(-1)); }
/// <summary> /// 设置Api行为返回的任务异常 /// 设置失败则返远程异常对象 /// </summary> /// <param name="taskSetActionTable">任务行为表</param> /// <param name="requestContext">请求上下文</param> /// <returns></returns> public static RemoteException SetApiActionTaskException(TaskSetActionTable taskSetActionTable, RequestContext requestContext) { var body = requestContext.Packet.body; var message = body == null ? null : body.ToString(); var taskSetAction = taskSetActionTable.Take(requestContext.Packet.id); if (taskSetAction != null) { taskSetAction.SetAction(SetTypes.SetReturnException, message, null); return null; } return new RemoteException(message); }
/// <summary> /// 释放资源 /// </summary> public void Dispose() { this.table = null; this.timer.Dispose(); }
/// <summary> /// timer回调 /// </summary> /// <param name="state"></param> private void OnTimerCallback(object state) { this.table.Take(this.Id); this.SetException(new TimeoutException()); this.table = null; }
/// <summary> /// 设置Api行为返回的任务结果 /// </summary> /// <param name="requestContext">上下文</param> /// <param name="taskSetActionTable">任务行为表</param> public static void SetApiActionTaskResult(RequestContext requestContext, TaskSetActionTable taskSetActionTable) { var taskSetAction = taskSetActionTable.Take(requestContext.Packet.id); if (taskSetAction != null) { var returnValue = requestContext.Packet.body; var serializer = requestContext.Session.Server.JsonSerializer; taskSetAction.SetAction(SetTypes.SetReturnReult, returnValue, serializer); } }