Esempio n. 1
0
        public async Task TestDoubleDisposeOnlyPermitsOneTask()
        {
            var mutex      = new AsyncLock();
            var t1HasLock  = new TaskCompletionSource <bool>();
            var t1Continue = new TaskCompletionSource <bool>();

            await Task.Run(
                async() =>
            {
                AsyncLock.Releaser key = await mutex.LockAsync();
                key.Dispose();
                key.Dispose();
            });

            Task t1 = Task.Run(
                async() =>
            {
                using (await mutex.LockAsync())
                {
                    t1HasLock.SetResult(true);
                    await t1Continue.Task;
                }
            });
            await t1HasLock.Task;

            Task <Task <AsyncLock.Releaser> > task2Start = Task.Factory.StartNew(async() => await mutex.LockAsync());
            Task <AsyncLock.Releaser>         t2         = await task2Start;

            Assert.False(t2.IsCompleted);
            t1Continue.SetResult(true);
            await t2;
            await t1;
        }
        protected LanguageKernelTestBase(ITestOutputHelper output)
        {
            _lockReleaser = Task.Run(() => _lock.LockAsync()).Result;

            DisposeAfterTest(output.SubscribeToPocketLogger());
        }
 internal Releaser(AsyncLock.Releaser releaser) =>
Esempio n. 4
0
 public Releaser(object entry, AsyncLock.Releaser asyncLockReleaser)
 {
     _entry             = (Entry)entry;
     _asyncLockReleaser = asyncLockReleaser;
 }
 public async Task AcquireLock()
 {
     this.releaser = await this.asyncLock.AcquireAsync();
 }