public async Task Synchronize(ISynchronizationLogger logger)
        {
            var synchronizationContext = await _contextFactory.Create();

            await _inner.Synchronize(logger, synchronizationContext);

            await _contextFactory.SynchronizationFinished(synchronizationContext);
        }
        public void AboutSynchronizationContext()
        {
            var d = new Dictionary <int, int>();

            ISynchronizationContextFactory synchronizationContextFactory = FILL_ME_IN;

            var synchronizationContext = synchronizationContextFactory.Create();
            var threadPump             = new TaskRunner(synchronizationContext,
                                                        (_) => (synchronizationContext as IConsumerSideSynchronizationContext)?.Complete(),
                                                        // Run continuations and propagate any exceptions
                                                        (Task task) =>
            {
                (synchronizationContext as IConsumerSideSynchronizationContext)?.RunOnCurrentThread();
                task.GetAwaiter().GetResult();
            });

            threadPump.Run(async() => await AboutThreadSynchronizationHelper.PerformTaskAsync(d).ConfigureAwait(false));
            Assert.True(d.Count == 1);
        }