我想知道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日:Victor的回答是正确的,但我确实希望展示您在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
答案 0 :(得分:23)
现在支持异步。请参阅博文here。
不幸的是,对这两个问题的简短回答是:不支持。
(略)更长的答案:
WebJobs SDK不支持异步方法。如果您查看执行日志(在仪表板上),您将看到一条警告,指出异步函数(返回Task
或Task<>
的函数)是同步执行的。
我们不支持本地模拟器。开发时必须使用真实的存储帐户。
答案 1 :(得分:7)
随着时间的推移,答案现在是yes, you can!