Azure関数を使用してファイル変換を実装しようとしています。変換には多くの時間がかかります。したがって、私は呼び出し側サーバーでの応答を待っていません。 私は応答をすぐに返す(サービスが利用可能であり、変換が開始されていることを示すために)関数を書いて、別のスレッドで変換を実行します。コールバックURLは変換結果を送信するために使用されます。Azure関数 - 別のスレッドで長時間実行する
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, Stream srcBlob, Binder binder, TraceWriter log)
{
log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");
// Get request model
var input = await req.Content.ReadAsAsync<ConvertInputModel>();
//Run convert in separate thread
Task.Run(async() => {
//Read input blob -> convert -> upload output blob
var convertResult = await ConvertAndUploadFile(input, srcBlob, binder, log);
//return result using HttpClient
SendCallback(convertResult, input.CallbackUrl);
});
//Return response immediately
return req.CreateResponse(HttpStatusCode.OK);
}
新しいタスクがバインディングを中断する問題。私はparamsにアクセスする際に例外が発生します。だから、どうすれば別のトレッドで長時間の運転をすることができますか?または、そのような解決策は完全に間違っていますか?
Azure関数の内部実装についてはわかりませんが、そのようなバックグラウンドタスクを実行できるのであれば、私は非常に驚くでしょう。たとえば、キューにメッセージをドロップするなどの新しい設計が必要で、Webジョブのような別のプロセスが必要になります。 – Crowcoder