Azure WebJobs - Могу ли я использовать методы Async?
Мне было интересно, может ли Azure WebJobs SDK инициировать асинхронные методы? В настоящее время у меня есть метод, который выглядит следующим образом:
class Program
{
static void Main(string[] args)
{
var host = new JobHost();
host.RunAndBlock();
}
public static void ProcessStuff([QueueInput("myqueue")] string msg)
{
var tsk = ProcessStuffAsync(msg)
.ContinueWith(x => HandleAsyncError(x),
TaskContinuationOptions.OnlyOnFaulted);
tsk.Wait();
}
public static async Task ProcessStuffAsync(string msg)
{
// do some async stuff and await it
}
// other methods ...
}
Тем не менее, мне было интересно, могу ли я просто указать JobHost для вызова моего асинхронного метода? Там нет тонны документации, пытаясь использовать async/await в WebJobs, и было бы очень приятно, если бы я мог.
Я пытаюсь запустить это локально для тестирования... но SDK WebJobs не поддерживает локальный эмулятор хранилища...
UPDATE 4/7/2014: ответ Виктора верен, но я хотел показать, что вы увидите, используя методы async в WebJob (они работают).
Для метода в вашем WebJob, который выглядит следующим образом:
public async static Task ProcessMessageAsync([QueueInput("testq2")] string message)
{
await Task.Delay(50);
Console.WriteLine("Processing Message Async...");
Console.WriteLine(message);
}
В журнале WebJobs вы увидите следующий вывод:
running in pid: 6272
Timestamp:4:36:02 PM
Parameters bound. Invoking user function.
--------
Warning: This asynchronous method will be run synchronously.
Processing Message Async...
a test message
--------
Success
Ответы
Ответ 1
Теперь поддерживается Async. См. Запись в блоге здесь.
К сожалению, короткий ответ на оба вопроса: не поддерживается.
(слегка) более длинный ответ:
WebJobs SDK не поддерживает асинхронные методы. Если вы посмотрите в журнале выполнения (на панели управления), вы увидите предупреждение о том, что асинхронные функции (функции, возвращающие Task
или Task<>
) выполняются синхронно.
Мы не поддерживаем локальный эмулятор. Вы должны использовать реальную учетную запись хранилища при разработке.
Ответ 2
С течением времени ответ теперь да, вы можете!