serilog-contrib / serilog-sinks-slack

A simple (yet customizable) Slack logging sink for Serilog
MIT License
39 stars 26 forks source link

Upgrading to the latest version of Serilog causes infinite loop #48

Open jgwconsulting opened 4 months ago

jgwconsulting commented 4 months ago

I haven't really dug into the problem yet but the symptoms first showed when a service wouldn't start up. Running the exe interactively resulted in:

Stack overflow.
Repeat 8733 times:
--------------------------------
   at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose()
   at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean)
   at Serilog.Sinks.Slack.SlackSink.Dispose()
--------------------------------
   at Serilog.LoggerConfiguration+<>c__DisplayClass33_0.<CreateLogger>g__Dispose|1()
   at Serilog.Extensions.Hosting.ReloadableLogger.Reload(System.Func`2<Serilog.LoggerConfiguration,Serilog.LoggerConfiguration>)
   at Serilog.SerilogServiceCollectionExtensions+<>c__DisplayClass3_0.<AddSerilog>b__0(System.IServiceProvider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier)
   at System.Collections.Concurrent.ConcurrentDictionary`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].GetOrAdd(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, System.Func`2<Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier,System.__Canon>)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(System.Type)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type)
   at Serilog.SerilogServiceCollectionExtensions+<>c__DisplayClass3_0.<AddSerilog>b__2(System.IServiceProvider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(Microsoft.Extensions.DependencyInjection.ServiceLookup.ConstructorCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(Microsoft.Extensions.DependencyInjection.ServiceLookup.ConstructorCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier)
   at System.Collections.Concurrent.ConcurrentDictionary`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].GetOrAdd(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, System.Func`2<Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier,System.__Canon>)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(System.Type)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type)
   at Microsoft.Extensions.Hosting.HostBuilder+<>c__DisplayClass35_0.<PopulateServiceCollection>b__2(System.IServiceProvider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier)
   at System.Collections.Concurrent.ConcurrentDictionary`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].GetOrAdd(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, System.Func`2<Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier,System.__Canon>)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceIdentifier, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(System.Type)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type)
   at Microsoft.Extensions.Hosting.HostBuilder.ResolveHost(System.IServiceProvider, System.Diagnostics.DiagnosticListener)
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at System.Linq.Utilities+<>c__DisplayClass2_0`3[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<CombineSelectors>b__0(System.__Canon)
   at System.Linq.Enumerable+SelectArrayIterator`2[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Threading.Tasks.Task.WhenAll(System.Collections.Generic.IEnumerable`1<System.Threading.Tasks.Task>)
   at ServiceBase.ServiceHost+<RunBackgroundServices>d__1.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[ServiceBase.ServiceHost+<RunBackgroundServices>d__1, ServiceBase, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]](<RunBackgroundServices>d__1 ByRef)
   at ServiceBase.ServiceHost.RunBackgroundServices(System.Collections.Generic.IEnumerable`1<System.Action`2<Microsoft.Extensions.Hosting.HostBuilderContext,Microsoft.Extensions.DependencyInjection.IServiceCollection>>)
   at Program+<<Main>$>d__0.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Program+<<Main>$>d__0, ItemWorker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]](<<Main>$>d__0 ByRef)
   at Program.<Main>$(System.String[])
   at Program.<Main>(System.String[])
TrapperHell commented 4 months ago

That's pretty hard to diagnose especially without any backing code that is producing this problem.

In common usage the latest version of the code doesn't / shouldn't produce stack-overflow exceptions within the Dispose method.

Are you using a ConcurrentDictionary to keep track of the dependencies? Are you trying to reload the logging configuration / logger?

Are you sure that the issue occurs only with the latest version? Would reverting to a prior version resolve the issue?

jgwconsulting commented 4 months ago

Thanks for getting back to me, and sorry for dumping a half-baked issue on you :) I'll do some proper digging and local debugging and let you know how I get on. It's a hugely useful extension for us, so we're really missing it.

rikdepeuter commented 3 months ago

We're running into the same problem. We started experiencing it after upgrading from dotnet6 to dotnet8 and updating SlackSink to 2.2.2. Downgrading SlackSink back to the original version 2.2.1 doesn't have any impact. We only get the error spam when the host stopped.

Edit: when I downgrade back to dotnet6, there's no more StackoverflowException with the same SlackSink version.

jdub4237 commented 3 days ago

I'm seeing this same issue in a .NET WebJob. We are using a similar stack to any other WebJob where we don't see the behavior but in this one we do. As soon as the host unloads it dumps a long error stack to the console like this:

[16:16:00 INF] Job host stopped Stack overflow. at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.SignalShutdown() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() ... at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.Sinks.PeriodicBatching.PeriodicBatchingSink.Dispose() at Serilog.Sinks.Slack.SlackSink.Dispose(Boolean) at Serilog.Sinks.Slack.SlackSink.Dispose() at Serilog.LoggerConfiguration+<>c__DisplayClass33_0.<CreateLogger>g__Dispose|1() at Serilog.Core.Logger.Dispose() at Serilog.Log.CloseAndFlush() at Serilog.Extensions.Logging.SerilogLoggerProvider.Dispose() at Serilog.Extensions.Logging.SerilogLoggerFactory.Dispose() at JasperFx.Core.DisposableExtensions.SafeDispose(System.IDisposable) at Lamar.IoC.Scope+<DisposeAsync>d__28.MoveNext() at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Lamar.IoC.Scope+<DisposeAsync>d__28, Lamar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]](<DisposeAsync>d__28 ByRef) at System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.Start[[Lamar.IoC.Scope+<DisposeAsync>d__28, Lamar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]](<DisposeAsync>d__28 ByRef) at Lamar.IoC.Scope.DisposeAsync() at Lamar.Container.<>n__0() at Lamar.Container+<DisposeAsync>d__7.MoveNext() at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Lamar.Container+<DisposeAsync>d__7, Lamar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]](<DisposeAsync>d__7 ByRef) at System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.Start[[Lamar.Container+<DisposeAsync>d__7, Lamar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]](<DisposeAsync>d__7 ByRef) at Lamar.Container.DisposeAsync() at Microsoft.Extensions.Hosting.Internal.Host+<<DisposeAsync>g__DisposeAsync|21_0>d.MoveNext() at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Microsoft.Extensions.Hosting.Internal.Host+<<DisposeAsync>g__DisposeAsync|21_0>d, Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]](<<DisposeAsync>g__DisposeAsync|21_0>d ByRef) at System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.Start[[Microsoft.Extensions.Hosting.Internal.Host+<<DisposeAsync>g__DisposeAsync|21_0>d, Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]](<<DisposeAsync>g__DisposeAsync|21_0>d ByRef) at Microsoft.Extensions.Hosting.Internal.Host.<DisposeAsync>g__DisposeAsync|21_0(System.Object) at Microsoft.Extensions.Hosting.Internal.Host+<DisposeAsync>d__21.MoveNext() at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Microsoft.Extensions.Hosting.Internal.Host+<DisposeAsync>d__21, Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]](<DisposeAsync>d__21 ByRef) at System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.Start[[Microsoft.Extensions.Hosting.Internal.Host+<DisposeAsync>d__21, Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]](<DisposeAsync>d__21 ByRef) at Microsoft.Extensions.Hosting.Internal.Host.DisposeAsync() at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<RunAsync>d__4.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<RunAsync>d__4, Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].ExecutionContextCallback(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<RunAsync>d__4, Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext(System.Threading.Thread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<RunAsync>d__4, Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext() at System.Runtime.CompilerServices.TaskAwaiter+<>c.<OutputWaitEtwEvents>b__12_0(System.Action, System.Threading.Tasks.Task) at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean) at System.Threading.Tasks.Task.RunContinuations(System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].SetExistingTaskResult(System.Threading.Tasks.Task1<System.Threading.Tasks.VoidTaskResult>, System.Threading.Tasks.VoidTaskResult) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult() at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<WaitForShutdownAsync>d__5.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<WaitForShutdownAsync>d__5, Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].ExecutionContextCallback(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<WaitForShutdownAsync>d__5, Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext(System.Threading.Thread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions+<WaitForShutdownAsync>d__5, Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext() at System.Runtime.CompilerServices.TaskAwaiter+<>c.<OutputWaitEtwEvents>b__12_0(System.Action, System.Threading.Tasks.Task) at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean) at System.Threading.Tasks.Task.RunContinuations(System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].SetExistingTaskResult(System.Threading.Tasks.Task1<System.Threading.Tasks.VoidTaskResult>, System.Threading.Tasks.VoidTaskResult) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult() at Microsoft.Extensions.Hosting.Internal.Host+<StopAsync>d__17.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.Internal.Host+<StopAsync>d__17, Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].ExecutionContextCallback(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.Internal.Host+<StopAsync>d__17, Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext(System.Threading.Thread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.Internal.Host+<StopAsync>d__17, Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext() at System.Runtime.CompilerServices.TaskAwaiter+<>c.<OutputWaitEtwEvents>b__12_0(System.Action, System.Threading.Tasks.Task) at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean) at System.Threading.Tasks.Task.RunContinuations(System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].SetExistingTaskResult(System.Threading.Tasks.Task1<System.Threading.Tasks.VoidTaskResult>, System.Threading.Tasks.VoidTaskResult) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult() at Microsoft.Extensions.Hosting.Internal.Host+<ForeachService>d__181[[System.Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.Internal.Host+d181[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].ExecutionContextCallback(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.Internal.Host+<ForeachService>d__181[[System.Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext(System.Threading.Thread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Extensions.Hosting.Internal.Host+d181[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], Microsoft.Extensions.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext() at System.Runtime.CompilerServices.TaskAwaiter+<>c.<OutputWaitEtwEvents>b__12_0(System.Action, System.Threading.Tasks.Task) at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean) at System.Threading.Tasks.Task.RunContinuations(System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].SetExistingTaskResult(System.Threading.Tasks.Task1<System.Threading.Tasks.VoidTaskResult>, System.Threading.Tasks.VoidTaskResult) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult() at Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<StopAsync>d__6.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<StopAsync>d__6, Microsoft.Azure.WebJobs.Host, Version=3.0.39.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]].ExecutionContextCallback(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<StopAsync>d__6, Microsoft.Azure.WebJobs.Host, Version=3.0.39.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]].MoveNext(System.Threading.Thread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<StopAsync>d__6, Microsoft.Azure.WebJobs.Host, Version=3.0.39.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]].MoveNext() at System.Runtime.CompilerServices.TaskAwaiter+<>c.<OutputWaitEtwEvents>b__12_0(System.Action, System.Threading.Tasks.Task) at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean) at System.Threading.Tasks.Task.RunContinuations(System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].SetExistingTaskResult(System.Threading.Tasks.Task1<System.Threading.Tasks.VoidTaskResult>, System.Threading.Tasks.VoidTaskResult) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult() at Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<ProcessLogs>d__7.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<ProcessLogs>d__7, Microsoft.Azure.WebJobs.Host, Version=3.0.39.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]].ExecutionContextCallback(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<ProcessLogs>d__7, Microsoft.Azure.WebJobs.Host, Version=3.0.39.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]].MoveNext(System.Threading.Thread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService+<ProcessLogs>d__7, Microsoft.Azure.WebJobs.Host, Version=3.0.39.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]].MoveNext() at System.Runtime.CompilerServices.TaskAwaiter+<>c.<OutputWaitEtwEvents>b__12_0(System.Action, System.Threading.Tasks.Task) at System.Threading.Tasks.AwaitTaskContinuation.System.Threading.IThreadPoolWorkItem.Execute() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading.PortableThreadPool+WorkerThread.WorkerThreadStart()