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<>) выполняются синхронно.

Мы не поддерживаем локальный эмулятор. Вы должны использовать реальную учетную запись хранилища при разработке.