Функция Azure: асинхронный метод и выходные параметры - PullRequest
0 голосов
/ 27 января 2019

Я хочу использовать очередь вывода в моей функции лазури.Я получаю пример кода из: https://docs.microsoft.com/en-us/sandbox/functions-recipes/queue-storage

[FunctionName("BasicQueueOutput")]
public static void Run([TimerTrigger("*/30 * * * * *")]TimerInfo myTimer,
                       TraceWriter log,
                       [Queue("101functionsqueue",Connection = "AzureWebJobsStorage")] out string queueMessage)
{
    log.Info("101 Azure Function Demo - Storage Queue output");

    queueMessage = DateTime.UtcNow.ToString();
}

, он отлично работает для метода синхронизации, но в моем случае это асинхронный метод:

    [FunctionName("FunctionRegisterDomain")]
    public async static Task Run(
        [QueueTrigger("domain-registation", Connection = "StorageConnectionString")]DomainForRegistration queueItem,
        [Queue("domain-add-to-office365", Connection = "StorageConnectionString")]out DomainForRegistration outputQueue,
        ILogger log)

, и я получаю ошибку:

Асинхронные методы не могут иметь параметры ref, in или out

конечно, я могу сделать это:

    [Queue("domain-add-to-office365", Connection = "StorageConnectionString")]CloudQueue outputQueue,

и затем использовать его:

await outputQueue.AddMessageAsync(new CloudQueueMessage(JsonConvert.SerializeObject(queueItem)));

но я бы хотел сделать это с привязками к очереди сообщений

1 Ответ

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

Вы ищете IAsyncCollector<T>, чтобы перейти от этого параметра к этому.Вместо «out string message» вы изменяете на ICollector<string> messages или IAsyncCollector<string> и добавляете свое сообщение в коллекцию в теле.

...