我试图使用Azure函数解决方案来实现文件转换。转换可能需要很长时间。因此我不想等待呼叫服务器上的响应。 我写了函数立即返回响应(以表明服务可用并开始转换)并在单独的线程中运行转换。回叫网址用于发送转换结果。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