public void FromWaitHandle_SignaledHandleWithCanceledToken_SynchronouslyCompletes()
        {
            var mre  = new ManualResetEvent(true);
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre, new CancellationToken(true));

            Assert.True(task.IsCompleted);
        }
        public void FromWaitHandle_SignaledHandle_SynchronouslyCompletes()
        {
            var mre  = new ManualResetEvent(true);
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre);

            Assert.True(task.IsCompleted);
        }
        public void FromWaitHandle_SignaledHandleWithZeroTimeout_SynchronouslyCompletesWithTrueResult()
        {
            var mre  = new ManualResetEvent(true);
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre, TimeSpan.Zero);

            Assert.True(task.IsCompleted);
            Assert.True(task.Result);
        }
예제 #4
0
        public void FromWaitHandle_SignaledHandleWithZeroTimeoutAndCanceledToken_SynchronouslyCompletesWithTrueResult()
        {
            ManualResetEvent mre  = new ManualResetEvent(true);
            Task <bool>      task = WaitHandleAsyncFactory.FromWaitHandle(mre, TimeSpan.Zero, new CancellationToken(true));

            Assert.True(task.IsCompleted);
            Assert.True(task.Result);
        }
        public async Task FromWaitHandle_TimeoutBeforeHandleSignalled_CompletesWithFalseResult()
        {
            var mre    = new ManualResetEvent(false);
            var task   = WaitHandleAsyncFactory.FromWaitHandle(mre, TimeSpan.FromMilliseconds(10));
            var result = await task;

            Assert.False(result);
        }
예제 #6
0
        public void FromWaitHandle_UnsignaledHandleWithCanceledToken_SynchronouslyCancels()
        {
            ManualResetEvent mre  = new ManualResetEvent(false);
            Task             task = WaitHandleAsyncFactory.FromWaitHandle(mre, new CancellationToken(true));

            Assert.True(task.IsCompleted);
            Assert.True(task.IsCanceled);
        }
예제 #7
0
        public void FromWaitHandle_UnsignaledHandleWithZeroTimeout_SynchronouslyCompletesWithFalseResult()
        {
            ManualResetEvent mre  = new ManualResetEvent(false);
            Task <bool>      task = WaitHandleAsyncFactory.FromWaitHandle(mre, TimeSpan.Zero);

            Assert.True(task.IsCompleted);
            Assert.False(task.Result);
        }
        public void FromWaitHandle_UnsignaledHandleWithZeroTimeoutAndCanceledToken_SynchronouslyCompletesWithFalseResult()
        {
            var mre  = new ManualResetEvent(false);
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre, TimeSpan.Zero, new CancellationToken(true));

            Assert.True(task.IsCompleted);
            Assert.False(task.Result);
        }
        public async Task FromWaitHandle_HandleSignalled_Completes()
        {
            var mre  = new ManualResetEvent(false);
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre);

            Assert.False(task.IsCompleted);
            mre.Set();
            await task;
        }
예제 #10
0
        public async Task FromWaitHandle_TimeoutBeforeHandleSignalledOrCanceled_CompletesWithFalseResult()
        {
            ManualResetEvent        mre  = new ManualResetEvent(false);
            CancellationTokenSource cts  = new CancellationTokenSource();
            Task <bool>             task = WaitHandleAsyncFactory.FromWaitHandle(mre, TimeSpan.FromMilliseconds(10), cts.Token);
            bool result = await task;

            Assert.False(result);
        }
        public async Task FromWaitHandle_HandleSignalledBeforeCanceled_CompletesSuccessfully()
        {
            var mre  = new ManualResetEvent(false);
            var cts  = new CancellationTokenSource();
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre, cts.Token);

            Assert.False(task.IsCompleted);
            mre.Set();
            await task;
        }
        public async Task FromWaitHandle_CanceledBeforeTimeoutOrHandleSignalled_CompletesCanceled()
        {
            var mre  = new ManualResetEvent(false);
            var cts  = new CancellationTokenSource();
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre, Timeout.InfiniteTimeSpan, cts.Token);

            Assert.False(task.IsCompleted);
            cts.Cancel();
            await AsyncAssert.CancelsAsync(task);
        }
예제 #13
0
        public async Task FromWaitHandle_CanceledBeforeHandleSignalled_CompletesCanceled()
        {
            ManualResetEvent        mre = new ManualResetEvent(false);
            CancellationTokenSource cts = new CancellationTokenSource();
            Task task = WaitHandleAsyncFactory.FromWaitHandle(mre, cts.Token);

            Assert.False(task.IsCompleted);
            cts.Cancel();
            await AsyncAssert.CancelsAsync(task).ConfigureAwait(false);
        }
        public async Task FromWaitHandle_HandleSignalledBeforeTimeout_CompletesWithTrueResult()
        {
            var mre  = new ManualResetEvent(false);
            var task = WaitHandleAsyncFactory.FromWaitHandle(mre, Timeout.InfiniteTimeSpan);

            Assert.False(task.IsCompleted);
            mre.Set();
            var result = await task;

            Assert.True(result);
        }
예제 #15
0
        public async Task FromWaitHandle_HandleSignalledBeforeTimeoutOrCanceled_CompletesWithTrueResult()
        {
            ManualResetEvent        mre  = new ManualResetEvent(false);
            CancellationTokenSource cts  = new CancellationTokenSource();
            Task <bool>             task = WaitHandleAsyncFactory.FromWaitHandle(mre, Timeout.InfiniteTimeSpan, cts.Token);

            Assert.False(task.IsCompleted);
            mre.Set();
            bool result = await task;

            Assert.True(result);
        }
예제 #16
0
        internal Task WaitForFenceAsync(ID3D12Fence fence, long fenceValue)
        {
            if (IsFenceComplete(fence, fenceValue))
            {
                return(Task.CompletedTask);
            }

            ManualResetEvent fenceEvent = new ManualResetEvent(false);

            fence.SetEventOnCompletion(fenceValue, fenceEvent);

            return(WaitHandleAsyncFactory.FromWaitHandle(fenceEvent));
        }
예제 #17
0
        internal Task WaitForFenceAsync(ID3D12Fence fence, long fenceValue)
        {
            if (IsFenceComplete(fence, fenceValue))
            {
                return(Task.CompletedTask);
            }

            lock (fenceLock)
            {
                fence.SetEventOnCompletion(fenceValue, fenceEvent);

                return(WaitHandleAsyncFactory.FromWaitHandle(fenceEvent));
            }
        }
예제 #18
0
        protected override async Task ExecuteAsync(CancellationToken ct)
        {
            int channel       = _borderControlConfig.ServoConfig.ChannelNumber;
            var objectInside  = _communicationObject.ObjectInside;
            var objectOutside = _communicationObject.ObjectOutside;
            int openingDelay  = _borderControlConfig.DelayBeforeOpeningMiliseconds;

            using (var servoHat = new ServoHat(_borderControlConfig.ServoHatI2c))
            {
                servoHat.Init(_borderControlConfig.ServoConfig.ChannelNumber);
                servoHat[_borderControlConfig.ServoConfig.ChannelNumber].Calibrate(
                    _borderControlConfig.ServoConfig.MaximumAngle,
                    _borderControlConfig.ServoConfig.MinimumPulseWidthMicroseconds,
                    _borderControlConfig.ServoConfig.MaximumPulseWidthMicroseconds);
                servoHat[_borderControlConfig.ServoConfig.ChannelNumber].WriteAngle(90);
                while (!ct.IsCancellationRequested)
                {
                    Console.WriteLine("Open. Waiting for CLOSE signal...");
                    //wait for CLOSE signal periodically checking if exit requested
                    while (!await WaitHandleAsyncFactory.FromWaitHandle(objectInside, System.TimeSpan.FromSeconds(1), ct))
                    {
                        if (ct.IsCancellationRequested)
                        {
                            return;
                        }
                    }

                    servoHat[channel].WriteAngle(0);
                    do
                    {
                        Console.WriteLine("Close. CLOSE signal received. Waiting for OPEN signal...");
                        //wait for OPEN signal periodically checking if exit requested
                        while (!await WaitHandleAsyncFactory.FromWaitHandle(objectOutside, System.TimeSpan.FromSeconds(1), ct))
                        {
                            if (ct.IsCancellationRequested)
                            {
                                return;
                            }
                        }
                        Console.WriteLine("Close. OPEN signal received. Waiting 5sec...");
                    } while (await WaitHandleAsyncFactory.FromWaitHandle(objectInside, System.TimeSpan.FromMilliseconds(openingDelay)));
                    servoHat[channel].WriteAngle(90);
                }
            }
        }
예제 #19
0
 public Task WaitOneAsync() => WaitHandleAsyncFactory.FromWaitHandle(_argsWaitHandle);