IHhhpHandlerだと.ashxで非同期処理ができない。
私が困ったのはサーバーへのAPI呼び出し後に、サーバーが別のAPIを叩いて結果を返す場合にawaitできなくて困った。
IHttpHandlerだと非同期処理ができない感じだったので、HttpTaskAsyncHandlerを使いました。
やることはシンプルで、継承元をHttpTaskAsyncHandlerに変更。
ProcessRequestAsyncがAbstractなので実装してあげるだけです。
public class MyHandler : HttpTaskAsyncHandler {
public override async Task ProcessRequestAsync(HttpContext context) {
await WhateverAsync(context);
}
}
以後はProcessRequestの代わりにProcessRequestAsyncが呼ばれるようになります。
なお私はHttpClient.PostAsync()を使っていたのでawaitしたかったのですが、WebClientだったら同期処理のまま書けるのでIHttpHandlerでも問題なかったです。
var client = new WebClient();
client.UploadString(url, jsonString);
コメント