在以下代码中,_uow(工作单元)的线程ID和哈希值在调用等待之前和之后是相同的。如果请求线程被释放,为什么继续请求线程具有相同的ID?为什么与请求线程关联的_uow对象具有相同的哈希ID,就像线程状态保持不变,尽管它被释放到线程池中?MVC请求线程状态为什么以及如何在等待MVC控制器动作后保持状态?
public AccountController(IUow uow)
{
_uow = uow;
}
public async Task<ActionResult> Sample()
{
int id1 = Thread.CurrentThread.ManagedThreadId;
int hash1 = _uow.GetHashCode();
await SignInAsync(account, isPersistent: false);
int id2 = Thread.CurrentThread.ManagedThreadId; //same as id1
int hash2 = _uow.GetHashCode(); //same as hash1
return Content("");
}
似乎它与同步上下文有关。我将阅读这些文章。 http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx http://msdn.microsoft.com/en-us/magazine/gg598924.aspx – Clive
@Clive,'AspNetSynchronizationContext '不强制执行线程关联,而是反之。确保你使用['UseTaskFriendlySynchronizationContext'](http://msdn.microsoft.com/en-us/library/hh975440.aspx)。 – Noseratio