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

Ras*_*kov 2 c# azure azure-blob-storage azure-functions azure-cosmosdb

我实现了 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();
        // . . .
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Jer*_*Liu 6

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

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

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

请参阅CosmosDB 输出示例。