没有等待的QqsClient.SendMessageAsync不起作用

时间:2018-10-31 14:03:17

标签: c# amazon-web-services aws-lambda amazon-sqs

我有一个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.

可以这样做吗?

2 个答案:

答案 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函数将此数组包装在一个诺言中。这样,可以同时解决承诺。