public void Wait_Multiple_Threads() { DirectoryInfo directory = Directory.CreateDirectory($"{Guid.NewGuid().ToString("N")}"); try { var subject = new AzureWebJobShutdownRequest(directory); Task t1 = Task.Run(() => subject.Wait()); Task t2 = Task.Run(() => subject.Wait()); File.WriteAllText($"{directory.FullName}/{Guid.NewGuid().ToString("N")}.txt", string.Empty); bool wait = Task.WaitAll(new[] { t1, t2 }, TimeSpan.FromSeconds(1)); Assert.That(wait, Is.True); Task t3 = Task.Run(() => subject.Wait()); wait = Task.WaitAll(new[] { t3 }, TimeSpan.FromSeconds(1)); Assert.That(wait, Is.True); } finally { directory.Delete(true); } }
internal ServicesAdvancedConfiguration(ServicesConfiguration services) { if (services == null) { throw new ArgumentNullException(nameof(services)); } _registrations = new Dictionary <Type, Registration>(); _installers = new List <IWindsorInstaller>(); Register <ILogger, DbLogger, EventLogger>(); Register <IConfigurationRepository, DbConfigurationRepository, FileBasedConfigurationRepository>(); Register <IArchiveService, DbArchiveService, FileBasedArchiveService>(); Register <IDistributedMutex, DbDistributedMutex, ThrowingDistributedMutex>(); Register <IRuntimeSettings, AppConfigRuntimeSettings>(); Register <IFeatureToggler, InMemoryFeatureToggler>(); Register(kernel => Environment.UserInteractive ? Console.Out : TextWriter.Null); if (AzureWebJobShutdownRequest.IsRunningInAzure()) { Register <IWaitForShutdownRequest, AzureWebJobShutdownRequest>(); } else { Register <IWaitForShutdownRequest, WaitForEscapeKey>(); } Services = services; }