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 知道调用我的异步方法?没有大量关于尝试在 WebJobs 中使用 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 不支持异步方法。如果您查看执行日志(在仪表板上),您将看到一条警告,指出异步函数(返回Taskor的函数Task<>)是同步执行的。

我们不支持本地模拟器。开发时必须使用真实的存储帐户。

于 2014-04-07T15:45:33.460 回答
7

随着时间的推移,现在的答案是,是的,你可以

于 2014-09-07T00:03:03.833 回答