.ashxでの非同期処理 (ASP.NET)

C#

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);

コメント