Azure函数不能与QueueTrigger和非无效返回值一起使用?

时间:2018-07-07 00:18:39

标签: c# .net azure azure-storage azure-functions

我发布了函数的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,没有输出,没有记录,日志流中没有错误等。实际上,除了这种渐进的猜测外,几乎无法找出问题所在。检查我做了。

有什么想法吗?

1 个答案:

答案 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());
}