web-dev-qa-db-ja.com

Azure WebJobs-非同期メソッドを使用できますか?

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に知らせることができるかどうか疑問に思っていました。 WebJobsでasync/awaitを使おうとすることについては、たくさんのドキュメントがありません。できれば、それは本当に素晴らしいことです。

これをローカルで実行してテストしようとしています...しかし、WebJobsSDKはローカルのストレージエミュレーターをサポートしていません...

UPDATE 4/7/2014:ビクターの答えは正しいですが、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
21
ericb

非同期がサ​​ポートされるようになりました。ブログ投稿を参照してください ここ

残念ながら、両方の質問に対する簡単な答えは次のとおりです。サポートされていません。

(少し)長い答え:

WebJobsSDKは非同期メソッドをサポートしていません。 (ダッシュボードの)実行ログを見ると、非同期関数(TaskまたはTask<>を返す関数)が同期して実行されているという警告が表示されます。

ローカルエミュレータはサポートしていません。開発時には、実際のストレージアカウントを使用する必要があります。

23

時間の経過とともに、答えは今、 はい、できます

7
Nate Jackson