public async Task Should_insert_and_retrieve_parallel_with_waits()
        {
            var expectedEvents = 10 * 1000;

            var consumer      = new MyEventConsumer(expectedEvents);
            var consumerGrain = new MyEventConsumerGrain(_ => consumer, grainState, _.EventStore, eventDataFormatter, log);

            await consumerGrain.ActivateAsync(consumer.Name);

            await consumerGrain.ActivateAsync();

            Parallel.For(0, 10, x =>
            {
                for (var j = 0; j < 10; j++)
                {
                    for (var i = 0; i < 100; i++)
                    {
                        var commitId = Guid.NewGuid();

                        var data = eventDataFormatter.ToEventData(Envelope.Create <IEvent>(new MyEvent()), commitId);

                        _.EventStore.AppendAsync(commitId, commitId.ToString(), new[] { data }).Wait();
                    }

                    Thread.Sleep(1000);
                }
            });

            await AssertConsumerAsync(expectedEvents, consumer);
        }
        public async Task Should_insert_and_retrieve_parallel_with_stops_and_starts()
        {
            var expectedEvents = 10 * 1000;

            var consumer      = new MyEventConsumer(expectedEvents);
            var consumerGrain = new MyEventConsumerGrain(_ => consumer, grainState, _.EventStore, eventDataFormatter, log);

            var scheduler = consumerGrain.Scheduler;

            consumer.EventReceived = count =>
            {
                if (count % 1000 == 0)
                {
                    Task.Factory.StartNew(async() =>
                    {
                        await consumerGrain.StopAsync();
                        await consumerGrain.StartAsync();
                    }, default, default, scheduler).Forget();