public async Task AsyncChainEndToEnd_CustomFactories()
        {
            using (_functionCompletedEvent = new ManualResetEvent(initialState: false))
            {
                CustomQueueProcessorFactory queueProcessorFactory = new CustomQueueProcessorFactory();
                _hostConfig.Queues.QueueProcessorFactory = queueProcessorFactory;

                CustomStorageClientFactory storageClientFactory = new CustomStorageClientFactory();
                _hostConfig.StorageClientFactory = storageClientFactory;

                await AsyncChainEndToEndInternal();

                Assert.Equal(3, queueProcessorFactory.CustomQueueProcessors.Count);
                Assert.True(queueProcessorFactory.CustomQueueProcessors.All(p => p.Context.Queue.Name.StartsWith("asynce2eq")));
                Assert.True(queueProcessorFactory.CustomQueueProcessors.Sum(p => p.BeginProcessingCount) >= 2);
                Assert.True(queueProcessorFactory.CustomQueueProcessors.Sum(p => p.CompleteProcessingCount) >= 2);

                Assert.Equal(19, storageClientFactory.TotalBlobClientCount);
                Assert.Equal(15, storageClientFactory.TotalQueueClientCount);
                Assert.Equal(0, storageClientFactory.TotalTableClientCount);

                Assert.Equal(8, storageClientFactory.ParameterBlobClientCount);
                Assert.Equal(5, storageClientFactory.ParameterQueueClientCount);
                Assert.Equal(0, storageClientFactory.ParameterTableClientCount);
            }
        }
        public async Task AsyncChainEndToEnd_CustomFactories()
        {
            using (_functionCompletedEvent = new ManualResetEvent(initialState: false))
            {
                CustomQueueProcessorFactory queueProcessorFactory = new CustomQueueProcessorFactory();

                _hostBuilder.ConfigureServices(services =>
                {
                    services.AddSingleton <IQueueProcessorFactory>(queueProcessorFactory);
                });

                await AsyncChainEndToEndInternal(_hostBuilder);

                Assert.Equal(2, queueProcessorFactory.CustomQueueProcessors.Count);
                Assert.True(queueProcessorFactory.CustomQueueProcessors.All(p => p.Context.Queue.Name.StartsWith("asynce2eq")));
                Assert.True(queueProcessorFactory.CustomQueueProcessors.Sum(p => p.BeginProcessingCount) >= 2);
                Assert.True(queueProcessorFactory.CustomQueueProcessors.Sum(p => p.CompleteProcessingCount) >= 2);
            }
        }
    static void Main(string[] args)
    {
        var builder = new HostBuilder();
        var facorty = new CustomQueueProcessorFactory();

        builder.ConfigureWebJobs(b =>
        {
            b.AddAzureStorageCoreServices();
            b.AddAzureStorage();
        });
        builder.ConfigureServices(s => s.AddSingleton <IQueueProcessorFactory>(facorty));
        builder.ConfigureAppConfiguration((context, config) =>
        {
            config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
        });
        var host = builder.Build();

        using (host)
        {
            host.Run();
        }
    }