예제 #1
0
        private async Task checkLoop()
        {
            if (await checkFile(_checkMode).ConfigureAwait(false))
#endif

            {
                onChanged();
                return;
            }

            while (true)
            {
#if NET40
                var timeout = _are.AsTask(_delay).Result;
#else
                var timeout = await _are.AsTask(_delay).ConfigureAwait(false);
#endif

                lock (_sync)
                    if (_disposed)
                    {
                        return;
                    }

#if NET40
                if (checkFile(timeout ? CheckMode.None : _checkMode))
#else
                if (await checkFile(timeout ? CheckMode.None : _checkMode).ConfigureAwait(false))
#endif
                {
                    onChanged();
                    return;
                }
            }
        }
예제 #2
0
        public async Task SendMsg(Msg msg)
        {
            if (msg.Data == null)
            {
                throw new ArgumentException();
            }

            int len = msg.Data.tlen;

            if (Interlocked.Add(ref sendingWindow, -len) < 0)
            {
                do
                {
                    await sendingWindowEvent.AsTask();
                } while (sendingWindow < 0);
            }

            var seqMsg = new SeqMsg()
            {
                Msg = msg, Len = len, Seq = SentPacketsCount++
            };

            unackedPackets.Enqueue(seqMsg);

            await WaitBaseStream();

            bool ok = false;

            try {
                await BaseStream.SendMsg(new BytesView(new byte[] { (byte)Opcode.Data }) { nextNode = msg.Data });

                ok = true;
            } catch (Exception) {
            }
        }
예제 #3
0
        public async Task HostReconfigWatchdog(CancellationToken cancel)
        {
            while (!cancel.IsCancellationRequested)
            {
                try
                {
                    var awaitInterval = _configOptions.CurrentValue.CheckAliveInterval;

                    await SyncConfig(cancel);

                    await Task.WhenAny(Task.Delay(awaitInterval, cancel), _triggerReloadConfig.AsTask());

                    _triggerReloadConfig.Reset();
                }
                catch (TaskCanceledException) { break; }
            }
        }