/// <summary> /// 调用客户端实现的服务方法 /// 并返回结果数据任务 /// </summary> /// <typeparam name="T">返回值类型</typeparam> /// <param name="api">api</param> /// <param name="parameters">参数</param> /// <exception cref="SocketException"></exception> /// <exception cref="SerializerException"></exception> /// <returns>远程数据任务</returns> public Task <T> InvokeApi <T>(string api, params object[] parameters) { var packet = new FastPacket { api = api, id = this.Server.PacketIdProvider.NewId(), state = true, fromClient = false, body = parameters }; // 登记TaskSetAction var taskSource = new TaskCompletionSource <T>(); var taskSetAction = new TaskSetAction <T>(taskSource); this.Server.TaskSetActionTable.Add(packet.id, taskSetAction); var packetJson = this.Server.JsonSerializer.Serialize(packet); this.SendText(packetJson); return(taskSource.Task); }
/// <summary> /// 添加回调信息记录 /// </summary> /// <param name="key">键值</param> /// <param name="taskSetAction">设置行为</param> /// <returns></returns> public void Add(long key, TaskSetAction taskSetAction) { this.table.TryAdd(key, taskSetAction); }