c# - 如何使用输出参数实现azure异步函数

标签 c# azure azure-functions azure-cosmosdb azure-blob-storage

我实现了Azure功能。

我有下一个案例:

  1. 当某些内容上传到 blob 时(输入 Blob 被触发)
  2. 流程逻辑
  3. 将某些内容保存到输出 blob(作为返回值输出)
  4. 将其他内容保存到 dynamo 数据库集合(输出参数)
  5. 将其他内容保存到另一个 dynamo 数据库集合(输出参数)

    [FunctionName("myFunction")]
    [return: Blob("images-text-out/{name}.txt")]
    public static string Run([BlobTrigger("samples-workitems/{name}", Connection = "StorageConnection")]Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob myBlob,
         string name,
         string blobTrigger,
         [CosmosDB(
            databaseName: "my-db-cosmos",
            collectionName: "CollectionA",
            ConnectionStringSetting = "CosmosDBConnection")] out dynamic processedFirst,
         [CosmosDB(
            databaseName: "my-db-cosmos",
            collectionName: "CollectionB",
            ConnectionStringSetting = "CosmosDBConnection")] out dynamic processedSecond,
         ILogger log,
         ExecutionContext context)
    {
        // . . .
        myBlob.DownloadToStreamAsync(memoryStream).Wait();
        // . . .
    }
    

这工作正常。问题是我无法利用异步调用的优势。原因很清楚,因为带有输出参数的方法不能是异步方法。

如何利用异步调用的优势实现具有多个输出的azure函数?

谢谢

最佳答案

我们可以使用IAsyncCollector在异步方法中。

Use the return value only if a successful function execution always results in a return value to pass to the output binding. Otherwise, use ICollector or IAsyncCollector

例如,更改 out dynamic processedSecondIAsyncCollector<dynamic> processedFirst并使用await processedFirst.AddAsync(someObject);稍后。

参见 CosmosDB output 的示例.

关于c# - 如何使用输出参数实现azure异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54361879/

相关文章:

c# - WPF FrameworkElementFactory 图像创建无法为 MouseDownEvent 添加处理程序

c# - 如何生成 SAS token 以安全连接到 Azure IOT 中心

asp.net-mvc - __RequestVerificationToken 并不总是被创建

azure - 用于对话数据提取的 Luis 或文本分析

Azure 逻辑应用步骤失败并出现错误 "BadRequest. Http request failed: the timeout was reached"

c# - 部分嵌套结构不会被继承

c# - 使用 InteractionRequests 设计一个 "busy"对话框

java - 无法使用用户管理身份凭据从 Azure 函数应用程序发送事件网格事件

c# - 结构图 3 中 HybridHttpOrThreadLocalScoped 的等价物是什么?

visual-studio - 如何捕获立即崩溃的 Azure 函数的控制台输出?