我实现了Azure功能。
我有下一个案例:
- 当某些内容上传到 blob 时(输入 Blob 被触发)
- 流程逻辑
- 将某些内容保存到输出 blob(作为返回值输出)
- 将其他内容保存到 dynamo 数据库集合(输出参数)
将其他内容保存到另一个 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 processedSecond
至IAsyncCollector<dynamic> processedFirst
并使用await processedFirst.AddAsync(someObject);
稍后。
参见 CosmosDB output 的示例.
关于c# - 如何使用输出参数实现azure异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54361879/