Я пытаюсь реализовать преобразование файлов с использованием решения Azure Functions. Преобразование может занять много времени. Поэтому я не хочу ждать ответа на вызывающем сервере. Я написал функцию, которая немедленно возвращает ответ (чтобы указать, что услуга доступна и начинается конвертация) и запускает преобразование в отдельном потоке. 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);
}
Проблема, связанная с заменой новой задачи. Я получаю исключение при доступе к параметрам. Итак, как я могу запускать длительную операцию в отдельном проходе? Или такое решение совершенно неверно?
Я не знаю внутренней реализации Azure Functions, но я был бы очень удивлен, если бы вы могли запускать подобные фоновые задачи. Вам нужен новый дизайн, например, например, отбрасывание сообщения в очереди, а также получение другого процесса, такого как веб-задание. – Crowcoder