2014-04-07 3 views
17

Mi chiedevo se l'SDK WebJobs di Azure può attivare metodi asincroni? Attualmente ho un metodo che è simile al seguente:Web di Azure - Posso utilizzare i metodi asincroni?

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 ... 
} 

Tuttavia, mi chiedevo se potessi avere la JobHost sa di chiamare il mio metodo asincrono, invece? Non c'è un sacco di documentazione là fuori sul tentativo di usare async/await in WebJobs, e sarebbe davvero bello se potessi.

Sto cercando di eseguire questo a livello locale per provare ... ma la WebJobs SDK non supporta l'emulatore di archiviazione locale ...

UPDATE 2014/04/07: La risposta di Victor è corretta, ma io volevo mostrare quello che vedrai usando i metodi asincroni in un WebJob (funzionano).

Per un metodo nella WebJob che è simile al seguente:

public async static Task ProcessMessageAsync([QueueInput("testq2")] string message) 
{ 
    await Task.Delay(50); 

    Console.WriteLine("Processing Message Async..."); 
    Console.WriteLine(message); 
} 

si vedrà il seguente output nel vostro WebJobs log:

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 
+0

Perché non ci provi e faccelo sapere? –

+1

@StephenCleary al momento sta lavorando su di esso - volevo solo evitare di configurare tutti gli account di archiviazione/sito Web di Azure e la configurazione se qualcun altro l'avesse già fatto con successo. – ericb

+1

Possibile duplicato di [Come fare Async nella funzione WebJob di Azure] (http://stackoverflow.com/questions/38249919/how-to-do-async-in-azure-webjob-function) –

risposta

20

Async è ora supportato. Vedi il post del blog here.

Sfortunatamente, la risposta breve ad entrambe le domande è: non supportato.

(leggermente) risposta più:

WebJobs SDK non supporta metodi asincrone. Se si guarda nel registro di esecuzione (nella dashboard) verrà visualizzato un avviso che indica che le funzioni asincrone (funzioni che restituiscono Task o Task<>) vengono eseguite in modo sincrono.

Non supportiamo l'emulatore locale. Devi sviluppare un account di archiviazione reale.

+1

Questo "non supporta asincrono metodi * ancora * ", giusto? ;) –

+0

@VictorHurdugaci - Credo che il mio obiettivo qui è che ho solo bisogno di essere in grado di utilizzare i metodi asincroni delle mie librerie condivise/di terze parti. Se JobHost li elabora in modo sincrono, va bene (per ora). – ericb

+2

@StephenCleary Stiamo considerando questa funzionalità per una versione futura. –

5

Con il passare del tempo, la risposta è ora, yes, you can!

+0

Ecco un link più ufficiale: http://azure.microsoft.com/blog/2014/08/21/announcing-the-0-4-0-beta-preview-of-microsoft-azure-webjobs-sdk/ –