最近、.NET4.0よりも.NET4.5を使い始めましたが、この機能が大好きasync
です。
ただし、ASP .NETのGlobal.asaxのSession_Startイベントで使用すると、何をしても(待機を実行してセッションにアクセスした場合)、エラーが発生します。
これがコードです。問題を再現できると確信しています。問題は-どうすればそれを解決できますか?
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()
呼び出し自体の終了を待機しているためですか?)。
また、手動でタスクを開始してみました。その場合、手動でタスクを開始できないため、クラッシュするだけです。私に関する限り、それはシステムによって行われなければなりません。
どんな手掛かり?これはタフです。