WebJobs do Azure - Posso usar métodos assíncronos?
Eu queria saber se o SDK do Azure WebJobs pode disparar métodos assíncronos? Atualmente, tenho um método parecido com o seguinte:
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 ...
}
No entanto, eu queria saber se eu poderia apenas ter o JobHost para chamar meu método assíncrono? Não há muita documentação disponível para tentar usar async / waitit no WebJobs, e seria muito bom se eu pudesse.
Estou tentando executar isso localmente para testar ... mas o WebJobs SDK não suporta o Emulador de armazenamento local ...
ATUALIZAÇÃO 4/7/2014: A resposta de Victor está correta, mas eu queria mostrar o que você verá ao usar métodos assíncronos em um WebJob (eles funcionam).
Para um método no seu WebJob que se parece com o seguinte:
public async static Task ProcessMessageAsync([QueueInput("testq2")] string message)
{
await Task.Delay(50);
Console.WriteLine("Processing Message Async...");
Console.WriteLine(message);
}
Você verá a seguinte saída no seu log do 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