【问题标题】:How to implement azure async functions with output parameters如何使用输出参数实现 azure 异步函数
【发布时间】:2019-06-19 02:06:31
【问题描述】:

我实现了 Azure 功能。

我有下一个案例:

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

    [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函数?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    仅当成功的函数执行总是导致返回值传递给输出绑定时才使用返回值。否则,使用 ICollector 或 IAsyncCollector

    例如,将out dynamic processedSecond 更改为IAsyncCollector<dynamic> processedFirst,稍后再使用await processedFirst.AddAsync(someObject);

    参见CosmosDB output的例子。

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多