protected override void Test(IOrganizationService service)
            {
                //
                // Arrange
                //
                // The CRM server will create one instance of your plugin, and then run it, multi-threaded,
                // so here we setup all the contexts, and call them potentially multi-threaded, on a single plugin
                var plugin = new RaceConditionPlugin();

                var builder = new PluginExecutionContextBuilder()
                              .WithFirstRegisteredEvent(plugin)
                              .WithPrimaryEntityName(Contact.EntityLogicalName)
                              .WithPreImage(new Contact());
                var providers = new List <IServiceProvider>();

                foreach (var contact in EntityIdsByLogicalName[Contact.EntityLogicalName].Cast <Id <Contact> >())
                {
                    var context = builder.WithTarget(new Contact
                    {
                        EMailAddress1 = contact.EntityId + "@test.com",
                        [Contact.Fields.AccountId] = contact.Entity.ParentCustomerId
                    })
                                  .WithPrimaryEntityId(contact)
                                  .Build();

                    providers.Add(new ServiceProviderBuilder(service, context, Logger).Build());
                }

                //
                // Act
                //
                var inParallel = false;

                Execute(providers, plugin, inParallel);

                //
                // Assert
                //
                var raceConditionFailures = new List <string>();

                foreach (var account in service.GetEntitiesById <Account>(EntityIdsByLogicalName[Account.EntityLogicalName].Select(a => a.EntityId)))
                {
                    if (account.EMailAddress1 == null)
                    {
                        raceConditionFailures.Add($"Account {account.Id} should have had it's email set to it's contact's email but didn't.");
                    }

                    if (account.PrimaryContactId == null)
                    {
                        raceConditionFailures.Add($"Account {account.Id} should have had it's PrimaryContactId set to it's contact's id but didn't.");
                    }
                }

                var failures = string.Join(Environment.NewLine, raceConditionFailures);

                Assert.IsTrue(string.IsNullOrEmpty(failures), "No failures should have occured, but the following were found:" + Environment.NewLine + failures);
            }
 private static void Execute(List <IServiceProvider> providers, RaceConditionPlugin plugin, bool inParallel)
 {
     if (inParallel)
     {
         Parallel.ForEach(providers, p => { plugin.Execute(p); });
     }
     else
     {
         foreach (var provider in providers)
         {
             plugin.Execute(provider);
         }
     }
 }