Ejemplo n.º 1
0
        public Task InvokeWriteAsync(IChannelHandlerContext ctx, object msg)
        {
            Contract.Requires(msg != null);
            // todo: check for cancellation
            //if (!validatePromise(ctx, promise, false)) {
            //    // promise cancelled
            //    return;
            //}

            if (Executor.InEventLoop)
            {
                return(ChannelHandlerInvokerUtil.InvokeWriteAsyncNow(ctx, msg));
            }
            else
            {
                var promise = new TaskCompletionSource();
                this.SafeExecuteOutbound(WriteTask.NewInstance(ctx, msg, promise), promise, msg);
                return(promise.Task);
            }
        }
Ejemplo n.º 2
0
        Task WriteAsync(object msg, bool flush)
        {
            FABHandlerContext next         = this.FindContextOutbound();
            object            m            = this.pipeline.Touch(msg, next);
            IEventExecutor    nextExecutor = next.Executor;

            if (nextExecutor.InEventLoop)
            {
                return(flush
                    ? next.InvokeWriteAndFlushAsync(m)
                    : next.InvokeWriteAsync(m));
            }
            else
            {
                var promise            = new TaskCompletionSource();
                AbstractWriteTask task = flush
                    ? WriteAndFlushTask.NewInstance(next, m, promise)
                    : (AbstractWriteTask)WriteTask.NewInstance(next, m, promise);
                SafeExecuteOutbound(nextExecutor, task, promise, msg);
                return(promise.Task);
            }
        }