/// <summary> /// 同步发送 /// </summary> /// <param name="subject">主体</param> /// <param name="data">数据</param> /// <returns></returns> public async Task <PubAckPacket> PublishWaitAckAsync(string subject, byte[] data) { return(await _policy.ExecuteAsync(async (cnt) => { var _channel = await ConnectAsync(); var Packet = new PubMsgPacket( _replyInboxId, _config.PubPrefix, _clientId, _config.ConnectionId, subject, data); var PubAckReady = new TaskCompletionSource <PubAckPacket>(); _waitPubAckTaskSchedule[Packet.ReplyTo] = PubAckReady; var PublishTask = _channel.WriteAndFlushAsync(Packet); //发送订阅请求 await PublishTask.ContinueWith((Task task) => { if (task.Status != TaskStatus.RanToCompletion) { PubAckReady.SetResult(null); } }, TaskScheduler.Current); return await PubAckReady.Task; }, new Dictionary <string, object>() { { "hld", "PublishWaitAckAsync" }, { "sub", subject } })); }
/// <summary> /// 异步发送 /// </summary> /// <param name="subject">主体</param> /// <param name="data">数据</param> /// <returns></returns> public async Task PublishAsync(string subject, byte[] data) { await _policy.ExecuteAsync(async (cnt) => { var _channel = await ConnectAsync(); var Packet = new PubMsgPacket( _replyInboxId, _config.PubPrefix, _clientId, _config.ConnectionId, subject, data); await _channel.WriteAndFlushAsync(Packet); }, new Dictionary <string, object>() { { "hld", "PublishAsync" }, { "sub", subject } }); }