21

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 に知らせることができるかどうか疑問に思っていましたか? Web ジョブで async/await を使用しようとすることに関するドキュメントはそれほど多くありません。

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

2014 年 4 月 7 日更新: ビクターの答えは正しいですが、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
4

2 に答える 2

24

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

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

(少し)長い答え:

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

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

于 2014-04-07T15:45:33.460 に答える
7

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

于 2014-09-07T00:03:03.833 に答える