Как реализовать Azure асинхронные функции с выходными параметрами - PullRequest
0 голосов
/ 25 января 2019

Я реализовал функцию Azure.

У меня есть следующий случай:

  1. Когда что-то загружено в BLOB-объект (Input Blob является триггером)
  2. Логика процесса
  3. Сохранение чего-либо в выходной BLOB-объект (Вывод как возвращаемое значение)
  4. Сохранение чего-либо еще в коллекции динамо-базы данных (Выходной параметр)
  5. Сохранение чего-либо еще в другой коллекции динамо-базы данных (Выводпараметр)

    [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 с несколькими выходами, используя преимущество асинхронных вызовов?

Спасибо

1 Ответ

0 голосов
/ 25 января 2019

Мы можем использовать IAsyncCollector в асинхронном методе.

Используйте возвращаемое значение, только если успешное выполнение функции всегда приводит к тому, что возвращаемое значение передается в выходную привязку.В противном случае используйте ICollector или IAsyncCollector

Например, измените out dynamic processedSecond на IAsyncCollector<dynamic> processedFirst и используйте await processedFirst.AddAsync(someObject); позже.

См. Пример Выход CosmosDB .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...