ASP.NET で IHttpHandler で非同期操作を実行し、web.config appsetting で有効になった新しい SynchronizationContext を使用してタスクが完了するのを待つ方法はありますUseTaskFriendlySynchronizationContext
か?
次のようなコードがあるとします。
public void ProcessRequest(HttpContext context)
{
var task = GetAndStartAsyncTask(context);
// do some work
// Wait for task to complete.
task.Wait();
// etc.
}
ここで、非同期コールバックが現在の asp.net 同期コンテキストで起動されるようにします。設定UseTaskFriendlySynchronizationContext
が false の場合、このコードは機能します。ただし、それを有効にすると、ここに示すコードはデッドロックになります (私が知る限り、タスクは現在のコンテキストの継続としてキューに入れられていますが、チェーン内の最初のタスク (ProcessRequest) が Wait でブロックされているためです)。
これを機能させる方法はありますか?
注: ここではなく、 を使用しIHttpHandler
ていますIHttpAsyncHandler
。