public static async Task InitializeAsync(IWorkbook workbook, ISynchronizationManager synchronizationManager, ICryptoService cryptoService, IVercorsService vercorsService, bool awaitPrepareProvider)
        {
            if (synchronizationManager == null)
            {
                throw new ArgumentNullException("synchronizationManager");
            }
            if (cryptoService == null)
            {
                throw new ArgumentNullException("cryptoService");
            }
            if (vercorsService == null)
            {
                throw new ArgumentNullException("vercorsService");
            }

            await synchronizationManager.InitializeAsync();

            synchronizationManager.RegisterProvider(
                SynchronizationService.ToodleDo,
                () => new ToodleDoSynchronizationProvider(synchronizationManager, cryptoService));

            synchronizationManager.RegisterProvider(
                SynchronizationService.Exchange,
                () => new ExchangeSynchronizationProvider(synchronizationManager, cryptoService));

            synchronizationManager.RegisterProvider(
                SynchronizationService.ExchangeEws,
                () => new ExchangeEwsSynchronizationProvider(synchronizationManager, cryptoService));

            synchronizationManager.RegisterProvider(
                SynchronizationService.OutlookActiveSync,
                () => new OutlookActiveSyncSynchronizationProvider(synchronizationManager, cryptoService, workbook.Settings.GetValue <string>(CoreSettings.DeviceId)));

            synchronizationManager.RegisterProvider(
                SynchronizationService.Vercors,
                () => new VercorsSynchronizationProvider(synchronizationManager, cryptoService, vercorsService));

            synchronizationManager.RegisterProvider(
                SynchronizationService.ActiveSync,
                () => new ActiveSyncSynchronizationProvider(synchronizationManager, cryptoService, workbook.Settings.GetValue <string>(CoreSettings.DeviceId)));

            synchronizationManager.AttachWorkbook(workbook);

            if (awaitPrepareProvider)
            {
                await synchronizationManager.PrepareProviderAsync();
            }
            else
                #pragma warning disable 4014
            {
                synchronizationManager.PrepareProviderAsync();
            }
                #pragma warning restore 4014
        }