public async Task CaptureStream_benchmark()
        {
            var manager = new ScreenCaptureManager();
            var screen  = manager.GetScreens().FirstOrDefault();

            var tcs = new CancellationTokenSource(TimeSpan.FromSeconds(10));

            var sw = Stopwatch.StartNew();

            var count = 0;

            await foreach (var capture in manager.CaptureStream(screen, cancellationToken: tcs.Token))
            {
                capture.Dispose();
                count++;
            }

            sw.Stop();

            Console.WriteLine($"Average: {(int)(sw.Elapsed.TotalMicroseconds() / count)} us");
            Console.WriteLine($"FPS: {count/sw.Elapsed.TotalSeconds}");
        }
        public async Task Multiple_CaptureStream_should_throw()
        {
            var manager = new ScreenCaptureManager();
            var screen  = manager.GetScreens().FirstOrDefault();

            var stream1 = manager.CaptureStream(screen);

            var enumerator = stream1.GetAsyncEnumerator();

            Exception ex = null;

            try
            {
                var capture1 = await enumerator.MoveNextAsync();

                var capture2 = await enumerator.MoveNextAsync();
            }
            catch (ScreenCaptureException sce)
            {
                ex = sce;
            }

            ex.Should().BeOfType <ScreenCaptureException>();
        }