【发布时间】:2013-10-07 07:40:20
【问题描述】:
我有一个使用存储库的方法 (userRepo):
public override Task<IdentityResult> CreateLocalUserAsync(IUser user, string password, CancellationToken cancellationToken)
{
var task = new Task<IdentityResult>(() => {
TUserEntity newUser = new TUserEntity
{
Id = user.Id,
UserName = user.UserName,
Password = password
};
userRepo.Save(newUser).Flush();
return new IdentityResult(true);
}, cancellationToken);
task.Start();
return task;
}
userRepoobject 有一个使用HttpContext.Current 的依赖项。这两个都是使用 ninject InRequestScope 解决的。
上面的方法是在Mvc 5中默认的AccountController内部调用的:
var result = await IdentityManager.Users.CreateLocalUserAsync(user, model.Password);
我已尝试将此设置添加到 web.config:
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
另外,我肯定在使用 .NET 4.5。这也在我的 web.config 中:
<httpRuntime targetFramework="4.5" />
在我开始任务之前无法从 HttpContext 获取信息,因为任务中 userRepo 的依赖项正在使用该信息,并且两个对象都使用 Ninject 解析。
如何确保HttpContext.Current 不会为空?
【问题讨论】:
-
“如何确保
HttpContext.Current不会为空?”根本不要使用Tasks 或async-await。在这种情况下,它并没有改善任何东西。 -
@svick 好吧,
await至少可以识别 http-context;这里的问题是Task.Start不是。
标签: c# ninject async-await httpcontext