我最近开始使用 .NET 4.5 而不是 .NET 4.0,我很喜欢这个async
功能。
但是,当在我的 Global.asax 的 Session_Start 事件中在 ASP .NET 中使用它时,无论我做什么(如果我执行等待并访问会话),都会导致错误。
这是代码。我相信你可以复制这个问题。问题是 - 我该如何解决?
protected async void Session_Start(object sender, EventArgs e)
{
var stuff = await UserAccess.RetrieveSomeStuff();
Session["Stuff"] = stuff;
}
我收到的错误如下。
异步模块或处理程序已完成,而异步操作仍处于挂起状态。
我也尝试了以下代码,但没有运气。
protected void Session_Start(object sender, EventArgs e)
{
var stuffTask = UserAccess.RetrieveSomeStuff();
stuffTask.Wait();
Session["Stuff"] = stuffTask.Result;
}
在那种情况下,它的状态会是WaitingForActivation
不断的,这可能表明它没有被放入系统要执行的任务队列中(可能是因为系统正在等待Wait()
调用本身完成?)。
我也尝试手动启动任务。在这种情况下,它只会崩溃,因为您无法手动启动任务。就我而言,它必须由系统完成。
有什么线索吗?这个很难。