示例#1
0
文件: Startup.cs 项目: yarligayan/try
        public void Configure(
            IApplicationBuilder app,
            IHostApplicationLifetime lifetime,
            IBrowserLauncher browserLauncher,
            IDirectoryAccessor directoryAccessor,
            PackageRegistry packageRegistry)
        {
            using (var operation = Log.OnEnterAndConfirmOnExit())
            {
                lifetime.ApplicationStopping.Register(() => _disposables.Dispose());

                ConfigureForOrchestratorProxy(app);

                // Serve Blazor on the /LocalCodeRunner/blazor-console prefix
                app.Map("/LocalCodeRunner/blazor-console", blazor =>
                {
                    blazor.UseClientSideBlazorFiles <MLS.Blazor.Startup>();

                    blazor.UseRouting();

                    blazor.UseEndpoints(endpoints =>
                    {
                        endpoints.MapFallbackToClientSideBlazor <MLS.Blazor.Startup>("index.html");
                    });
                });


                var budget = new Budget();
                _disposables.Add(() => budget.Cancel());
                BlazorPackageConfiguration.Configure(app, app.ApplicationServices, packageRegistry, budget, !StartupOptions.IsLanguageService);

                app.UseMvc()
                .UseDefaultFiles()
                .UseStaticFilesFromToolLocationAndRootDirectory(directoryAccessor.GetFullyQualifiedRoot());

                operation.Succeed();

                if (StartupOptions.Mode == StartupMode.Try && !StartupOptions.IsJupyter)
                {
                    var uri = new Uri(app.ServerFeatures.Get <IServerAddressesFeature>().Addresses.First());
                    Clock.Current
                    .Schedule(_ => LaunchBrowser(browserLauncher, directoryAccessor, uri), TimeSpan.FromSeconds(1));
                }
            }
        }
示例#2
0
文件: Startup.cs 项目: zeroyou/try
        public void Configure(
            IApplicationBuilder app,
            IApplicationLifetime lifetime,
            IBrowserLauncher browserLauncher,
            IDirectoryAccessor directoryAccessor,
            PackageRegistry packageRegistry)
        {
            using (var operation = Log.OnEnterAndConfirmOnExit())
            {
                lifetime.ApplicationStopping.Register(() => _disposables.Dispose());

                ConfigureForOrchestratorProxy(app);

                app.Map("/LocalCodeRunner/blazor-console", builder =>
                {
                    builder.UsePathBase("/LocalCodeRunner/blazor-console/");
                    builder.EnableCachingBlazorContent();
                    builder.UseBlazor <MLS.Blazor.Program>();
                });

                app.Map("/LocalCodeRunner/humanizer.api", builder =>
                {
                    builder.UsePathBase("/LocalCodeRunner/humanizer/");
                    builder.EnableCachingBlazorContent();
                    builder.UseBlazor <MLS.HumanizerRunner.Program>();
                });

                var budget = new Budget();
                _disposables.Add(() => budget.Cancel());
                BlazorPackageConfiguration.Configure(app, app.ApplicationServices, packageRegistry, budget, !StartupOptions.IsLanguageService);

                app.UseDefaultFiles()
                .UseStaticFilesFromToolLocation()
                .UseRouter(new StaticFilesProxyRouter())
                .UseMvc();

                operation.Succeed();

                if (StartupOptions.Mode == StartupMode.Try)
                {
                    Clock.Current
                    .Schedule(_ => LaunchBrowser(browserLauncher, directoryAccessor), TimeSpan.FromSeconds(1));
                }
            }
        }
示例#3
0
        public async Task StopAsync(CancellationToken cancellationToken)
        {
            // Stop called without start
            if (_executingTask == null)
            {
                return;
            }

            _budget.Cancel();

            // Wait until the task completes or the stop token triggers
            await Task.WhenAny(
                _executingTask,
                Task.Delay(-1, cancellationToken));

            // Throw if cancellation triggered
            cancellationToken.ThrowIfCancellationRequested();
        }
示例#4
0
        public async Task Budget_throws_an_informative_exception_after_it_is_cancelled()
        {
            var budget = new Budget();

            await Clock.Current.Wait(1.Seconds());

            budget.RecordEntry("one");

            await Clock.Current.Wait(10.Seconds());

            budget.Cancel();

            Action action = () => budget.RecordEntryAndThrowIfBudgetExceeded("two");

            action.Should().Throw <BudgetExceededException>()
            .Which
            .Message
            .Should()
            .Be($"Budget exceeded.{NewLine}" +
                $"  ✔ one @ 1.00 seconds{NewLine}" +
                $"  ❌ two @ 11.00 seconds");
        }
示例#5
0
 public void Dispose() => _budget?.Cancel();