예제 #1
0
        /// <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 } }));
        }
예제 #2
0
        /// <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 } });
        }