在 Autofac 配置中:我已将依赖项注册为 .InstancePerRequest()
并让我的部分代码使用 async
关键字或 .continueWith()
。我的问题是:如果在异步执行的延续中使用依赖项,那么依赖项是否只会在异步代码执行后才被释放,或者它可能发生在之前?
具体场景:
// in IocConfig.cs
ContainerBuilder.Register(c => Context.CreateFromToken(
c.Resolve<IUser>().Name,
.As<Context>()
.InstancePerRequest();
然后在一个文件中我有这段代码:
// elsewhere in the code for a specific request..
client.PostAsync(new Uri(_context.GetSetting("SomeEndpoint")),requestContent)
.ContinueWith(task =>
{
ErrorLog.Write(_context.CreateErrorEntry($"Request: sent {task.Result.StatusCode} result: {task.Result.ToJson()}", LogLevel.Debug));
});
此处的_context
(即.InstancePerRequest()
)在.ContinueWith()
中是否仍然可用,还是可以处置?
最佳答案
如果相同的 HttpContext
(在 MVC 中)或入站 RequestMessage
(在 Web API 中)在延续中可用,则每个请求项将在那里。请求生命周期范围存储在相应的位置。
如果它不可用(例如,如果您的等待者没有传播完整的执行上下文),那么请求生命周期范围可能会被您处理掉,并且它将不可用。
关于c# - 在 autofac 中注册为 .InstancePerRequest() 的依赖项是否始终在异步延续中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715523/