我实现了Azure功能。
我有另一种情况:
将其他内容保存到另一个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函数?
谢谢
答案 0 :(得分:4)
我们可以在异步方法中使用IAsyncCollector。
仅当成功执行函数总是导致返回值传递到输出绑定时,才使用返回值。否则,请使用ICollector或IAsyncCollector
例如,将out dynamic processedSecond
更改为IAsyncCollector<dynamic> processedFirst
,然后再使用await processedFirst.AddAsync(someObject);
。
请参见CosmosDB output的示例。