예제 #1
0
        public Pipe(RequestKey Key, PipingOptions Options)
        {
            const string Options_WaitingTimeout = nameof(Options) + "." + nameof(Options.WaitingTimeout);

            this.Key     = Key;
            this.Options = Options;
            if (Options.WaitingTimeout < TimeSpan.Zero)
            {
                throw new ArgumentException(string.Format(NameIsValue1RequiredNameIsValue2Over, Options_WaitingTimeout, Options.WaitingTimeout, nameof(TimeSpan.Zero)));
            }
            if (Options.WaitingTimeout is TimeSpan WaitTimeout)
            {
                WaitTokenSource = new CancellationTokenSource(WaitTimeout);
                var Token = WaitTokenSource.Token;
                CancelAction = WaitTokenSource.Token.Register(() =>
                {
                    ReadyTaskSource.TrySetCanceled(Token);
                    ResponseTaskSource.TrySetCanceled(Token);
                });
                ReadyTaskSource.Task.ContinueWith(t => CancelAction?.Dispose());
            }
            RegisterEvents();
        }
예제 #2
0
 internal SenderPipe(Pipe Current, PipingOptions Options, ILogger <SenderPipe> Logger)
 => (this.Current, this.Options, this.Logger) = (Current, Options, Logger);
예제 #3
0
 public CommandController(ILogger <CommandController> Logger, IOptions <PipingOptions> Options)
 {
     this.Logger  = Logger;
     this.Options = Options.Value;
 }
예제 #4
0
 public PipingController(IPipingStore Store, ILogger <PipingController> Logger, IOptions <PipingOptions> Options)
 {
     this.Store  = Store;
     Option      = Options.Value;
     this.Logger = Logger;
 }