我发布了函数的3个不同版本,最后一个版本是问题开始出现的地方。我认为这是异步,队列触发器和返回值的组合,但我不确定(而且找不到任何可以帮助我的文档)。
V1:现成的Visual Studio模板
[FunctionName("Function1")]
public static void Run([QueueTrigger("myqueue-items", Connection = "")]string myQueueItem, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
}
部署和测试时按预期工作。
V2:更改为async Task
[FunctionName("Function1")]
public static async Task([QueueTrigger("myqueue-items", Connection = "")]string myQueueItem, TraceWriter log)
{
await Task.Delay(1000);
log.Info($"C# Queue trigger function processed: {myQueueItem}");
}
仍然很好。
V3:使用Task<string>
[FunctionName("Function1")]
public static async Task<string> Run([QueueTrigger("myqueue-items", Connection = "")]string myQueueItem, TraceWriter log)
{
await Task.Delay(1000);
log.Info($"C# Queue trigger function processed: {myQueueItem}");
return new string(myQueueItem.Reverse().ToArray());
}
}
现在,当我在门户网站中进行测试时,我看到的只是Status: 202 Accepted
,没有输出,没有记录,日志流中没有错误等。实际上,除了这种渐进的猜测外,几乎无法找出问题所在。检查我做了。
有什么想法吗?
答案 0 :(得分:2)
队列触发器无法将任何数据返回给调用者:毕竟是队列。
您可以使用输出绑定功能,例如将输出发送到另一个队列。但是然后您需要使用一个额外的属性来注释此绑定:
[FunctionName("Function1")]
[return: Queue("myqueue-output", Connection = "")]
public static async Task<string> Run([QueueTrigger("myqueue-items", Connection = "")]string myQueueItem, TraceWriter log)
{
await Task.Delay(1000);
log.Info($"C# Queue trigger function processed: {myQueueItem}");
return new string(myQueueItem.Reverse().ToArray());
}