Функции Azure | Многократное использование привязки вывода

#azure #azure-functions #azure-signalr

Вопрос:

Могу ли я использовать аргумент привязки вывода в foreach несколько раз?

 [FunctionName("OnClientConnectedDisconnected")]
public async Task Run(
    [EventGridTrigger] EventGridEvent eventGridEvent,
    [SignalR(HubName = "Lobby")] IAsyncCollector<SignalRMessage> signalRMessage,
    [SignalR(HubName = "Lobby")] IAsyncCollector<SignalRGroupAction> signalRGroupMessage,
    ILogger log)
{
    ...
    ...
    foreach (var player in onlineFriends)
    {
        await signalRGroupMessage.AddAsync(
            new SignalRGroupAction
            {
                GroupName = $"Group_{player}",
                Action = GroupAction.Add,
                UserId = eventGridData.UserId
            }
        );
    }
}
 

Ответ №1:

Возможность многократного вызова выходной привязки в функции зависит от типа привязки и способа ее записи. Например, привязка вывода хранилища таблиц добавит в таблицу несколько объектов (по одному для каждого вызова), но привязка очереди отправит только одно сообщение. Я не вижу, чтобы привязка вывода SignalR допускала несколько вызовов.

Помните, что привязка необязательна-альтернативной стратегией было бы написать свой собственный код, чтобы создать свою группу и выйти из функции после цикла.

Комментарии:

1. Как вы узнаете, поддерживают ли эти привязки несколько вызовов или нет?

2. Если функция завершается после первого вызова выходной привязки, то она предназначена для вызова только один раз.

3. Я ищу реализацию метода SignalRAsyncCollector<T>.addAsync ()<T> и не могу понять, как он может избежать следующих вызовов?

Ответ №2:

Да, ты можешь.

В C# вы можете использовать привязку вывода SignalR несколько раз, и вызов просто происходит там, где вы вызываете await signalRGroupMessage.AddAsync()