public Task WakeUp(IAdapterToStageMessage msg)
            {
                var p = new TaskCompletionSource <NotUsed>();

                _upstreamCallback(new Tuple <IAdapterToStageMessage, TaskCompletionSource <NotUsed> >(msg, p));
                return(p.Task);
            }
 private void SendMessage(IAdapterToStageMessage msg, bool handleCancelled = true)
 {
     Send(() =>
     {
         _stageWithCallback.WakeUp(msg).Wait(_writeTimeout);
         if (_downstreamStatus.Value is Canceled && handleCancelled)
         {
             //Publisher considered to be terminated at earliest convenience to minimize messages sending back and forth
             _isPublisherAlive = false;
             throw PublisherClosedException;
         }
     });
 }
 public void WakeUp(IAdapterToStageMessage msg) => _callback(msg);