public void TestInline()
        {
            RingBuffer.RingBuffer <DisposableTestableClass> buffer = null;
            Queue <DisposableTestableClass> queue = new Queue <DisposableTestableClass>();

            for (var i = 0; i < bufferSize; i++)
            {
                queue.Enqueue(new DisposableTestableClass());
            }

            using (DisposableRingBuffer <DisposableTestableClass> disposableBuffer = new DisposableRingBuffer <DisposableTestableClass>(
                       bufferSize,
                       () => queue.Dequeue(),
                       waitTime))
            {
                buffer = disposableBuffer;
                var         factory = new TaskFactory();
                List <Task> tasks   = new List <Task>();
                for (int i = 0; i < runCount; i++)
                {
                    using var bufferedItem = disposableBuffer.Accquire();
                    System.Threading.Thread.Sleep(workTime);
                }
                Assert.Equal(bufferSize, disposableBuffer.Available);
                Assert.Equal(disposableBuffer.Capacity, disposableBuffer.Available);
            }


            Assert.All(queue, it => Assert.True(it.IsDisposed));
            Assert.Empty(queue);
            Assert.Equal(0, buffer.Available);
            Assert.Equal(bufferSize, buffer.Capacity);
        }
        public void TestMultiThreadDisposableTest()
        {
            RingBuffer.RingBuffer <DisposableTestableClass> buffer = null;
            Queue <DisposableTestableClass> queue = new Queue <DisposableTestableClass>();

            for (var i = 0; i < bufferSize; i++)
            {
                queue.Enqueue(new DisposableTestableClass());
            }

            using (DisposableRingBuffer <DisposableTestableClass> disposableBuffer = new DisposableRingBuffer <DisposableTestableClass>(
                       bufferSize,
                       () => queue.Dequeue(),
                       waitTime))
            {
                buffer = disposableBuffer;
                List <Thread> threads = new List <Thread>();

                for (int i = 0; i < runCount; i++)
                {
                    Thread thread = new Thread(() => {
                        using var bufferedItem = disposableBuffer.Accquire();
                        System.Threading.Thread.Sleep(workTime);
                        System.Diagnostics.Debug.WriteLine($"Item {bufferedItem.Current} - processado!");
                    });
                    thread.Start();
                    threads.Add(thread);
                }

                foreach (Thread thread in threads)
                {
                    thread.Join();
                }

                Assert.Equal(bufferSize, disposableBuffer.Available);
                Assert.Equal(disposableBuffer.Capacity, disposableBuffer.Available);
            }


            Assert.All(queue, it => Assert.True(it.IsDisposed));
            Assert.Empty(queue);
            Assert.Equal(0, buffer.Available);
            Assert.Equal(bufferSize, buffer.Capacity);
        }