我有一个使用仓库(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;
}
userRepo
对象具有一个依赖项,该依赖项使用 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" />
由于任务中的userRepo
依赖项使用了信息,并且这两个对象都是使用Ninject解析的,因此在开始任务之前无法从HttpContext
中获取信息。
我该如何确保HttpContext.Current
不会为空?
HttpContext.Current
不会为空?在这种情况下,不要使用Task
或async-await
,因为它们对此没有任何改进。 - svickawait
至少是 http 上下文感知的;这里的问题是Task.Start
不是。 - Marc Gravell