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);
            }
        }
Пример #2
0
        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;
        }