public async Task FlushAsync()
    {
        var mockedUnderlyingStream = new Mock <Stream>(MockBehavior.Strict);

        mockedUnderlyingStream.Setup(s => s.FlushAsync(It.IsAny <CancellationToken>())).Returns(Task.CompletedTask);
        var monitoringStream = new MonitoringStream(mockedUnderlyingStream.Object);
        await monitoringStream.FlushAsync();

        mockedUnderlyingStream.VerifyAll();
    }
    public async Task FlushAsync()
    {
        var mockedUnderlyingStream = new Mock <Stream>(MockBehavior.Strict);

        mockedUnderlyingStream.Setup(s => s.FlushAsync(It.IsAny <CancellationToken>())).Returns(Task.CompletedTask);
        var  monitoringStream = new MonitoringStream(mockedUnderlyingStream.Object);
        bool didFlushRaised   = false;

        monitoringStream.DidFlush += (s, e) => didFlushRaised = true;
        await monitoringStream.FlushAsync();

        Assert.True(didFlushRaised);
        mockedUnderlyingStream.VerifyAll();
    }