private static IContainer CreateContainer() { var serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(logging => logging.AddConsole()); var builder = new ContainerBuilder(); builder.Populate(serviceCollection); var autofacClaptrapBootstrapperBuilder = new AutofacClaptrapBootstrapperBuilder(new NullLoggerFactory(), builder); var claptrapBootstrapper = autofacClaptrapBootstrapperBuilder .ScanClaptrapDesigns(new[] { typeof(SagaClaptrap).Assembly }) .ScanClaptrapModule() .ConfigureClaptrapDesign(x => x.ClaptrapOptions.EventCenterOptions.EventCenterType = EventCenterType.None) .UseSQLiteAsTestingStorage() .Build(); claptrapBootstrapper.Boot(); builder.RegisterType <SagaClaptrap>() .AsSelf() .InstancePerLifetimeScope(); builder.RegisterType <TestStep1>() .AsSelf() .InstancePerLifetimeScope(); builder.RegisterType <TestStep2>() .AsSelf() .InstancePerLifetimeScope(); builder.RegisterType <CompensateStep1>() .AsSelf() .InstancePerLifetimeScope(); builder.RegisterType <CompensateStep2>() .AsSelf() .InstancePerLifetimeScope(); builder.RegisterType <ExceptionStep>() .AsSelf() .InstancePerLifetimeScope(); var container = builder.Build(); return(container); }
public static async Task Old() { var services = new ServiceCollection(); services.AddLogging(logging => { // logging.AddConsole(); }); var containerBuilder = new ContainerBuilder(); containerBuilder.Populate(services); containerBuilder.RegisterType <Burning>() .AsSelf() .InstancePerDependency(); var builder = new AutofacClaptrapBootstrapperBuilder(new NullLoggerFactory(), containerBuilder); var claptrapBootstrapper = builder .ScanClaptrapDesigns(new[] { typeof(Burning), typeof(IBurning), }) .ScanClaptrapModule() .UseSQLiteAsTestingStorage() .Build(); claptrapBootstrapper.Boot(); var container = containerBuilder.Build(); var factory = container.Resolve <Burning.Factory>(); var sw = Stopwatch.StartNew(); const int maxBurningCount = 100; var burnings = Enumerable.Range(0, maxBurningCount) .Select(x => factory.Invoke(new ClaptrapIdentity(x.ToString(), Codes.Burning))) .ToArray(); await Task.WhenAll(burnings.Select(x => x.ActivateAsync())); Console.WriteLine($"cost {sw.ElapsedMilliseconds} ms to activate all"); var total = Stopwatch.StartNew(); var rd = new Random(); for (var i = 0; i < 1_000_000; i++) { sw.Restart(); var tasks = Enumerable.Range(0, 1_000) .Select(x => { var id = rd.Next(0, maxBurningCount); return(burnings[id].HandleOneAsync()); }) .ToArray(); await Task.WhenAll(tasks); Console.WriteLine($"cost {sw.ElapsedMilliseconds} ms, {i}"); } Console.WriteLine($"total cost {total.ElapsedMilliseconds} ms"); // var container = containerBuilder.Build(); // var factory = (ClaptrapFactory) container.Resolve<IClaptrapFactory>(); // var id = new ClaptrapIdentity("1", Codes.Burning); // var lifetimeScope = factory.BuildClaptrapLifetimeScope(id); // var eventSaver = lifetimeScope.Resolve<IEventSaver>(); // var sw = Stopwatch.StartNew(); // // var total = Stopwatch.StartNew(); // for (var i = 0; i < 1_000_000; i++) // { // sw.Restart(); // const int batchItemCount = 1_000; // var tasks = Enumerable.Range(i * batchItemCount, batchItemCount) // .Select(x => // { // var unitEvent = new UnitEvent(id, Codes.BurningEvent, // UnitEvent.UnitEventData.Create()) // { // Version = x, // }; // return eventSaver.SaveEventAsync(unitEvent); // }); // await Task.WhenAll(tasks); // Thread.Sleep(1); // Console.WriteLine($"cost {sw.ElapsedMilliseconds} ms, {(i + 1) * batchItemCount}"); // } // // Console.WriteLine($"total cost {total.ElapsedMilliseconds} ms"); }