我有一个Lambda函数,该lambda函数应该将消息发送到SQS中的多个队列,然后退出,
如果我添加等待,则消息将发送到所有队列,
var sqsClient = ServerlessHelper.GetAmazonSqsClient();
foreach (var item in items)
{
await sqsClient.SendMessageAsync(item.QueueUrl, item.Message);
}
但是,如果我从代码中删除了await,则不会有任何消息发送到队列。我想并行发送消息。但是由于等待,我有功能无法并行发送消息。我正在尝试做这样的事情,
var sqsClient = ServerlessHelper.GetAmazonSqsClient();
foreach (var item in items)
{
sqsClient.SendMessageAsync(item.QueueUrl, item.Message);
}
// wait until are messages are sent to queues.
可以这样做吗?
答案 0 :(得分:0)
我猜sqsClient.SendMessageAsync(item.QueueUrl, item.Message);
返回了一个Task,因为它是一个异步函数?
您需要保存任务实例,然后像此example一样使用Task.WhenAll
。
答案 1 :(得分:-1)
是的,可能是这样的:
await Promise.all(
items.map(item =>
sqsClient.SendMessageAsync(item.QueueUrl, item.Message)
)
)
map函数将创建一个promise数组。您可以等待Promise.all
函数将此数组包装在一个诺言中。这样,可以同时解决承诺。