在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()
中使用,还是可以处置?
答案 0 :(得分:1)
如果在延续中有相同的HttpContext
(在MVC中)或入站RequestMessage
(在Web API中),则每个请求项将在那里。请求生存期范围存储在相应的位置。
如果它不可用(例如,如果你的awaiter没有传播完整的执行上下文),那么请求生命周期范围可能会从你的下方处理掉,并且它将无法使用。