gpt4 book ai didi

c# - 如果该方法已经是异步的,我是否应该进行快速异步操作

转载 作者:太空狗 更新时间:2023-10-29 22:30:09 26 4
gpt4 key购买 nike

我有这段代码(不重要的细节是它在 AWS 的 EC2 实例上运行,在 SQS 队列上处理消息)。

方法中的第一条语句通过 http 获取一些数据,第二条语句将状态保存到本地 dynamo 数据存储。

public bool HandleMessage(OrderAcceptedMessage message)
{
var order = _orderHttpClient.GetById(message.OrderId);
_localDynamoRepo.SaveAcceptedOrder(message, order);
return true;
}

性能特点是http往返需要100-200毫秒,dynamo写入需要10毫秒左右。

这两个操作都有 async 版本。我们可以这样写:

public async Task<bool> HandleMessage(OrderAcceptedMessage message)
{
var order = await _orderHttpClient.GetByIdAsync(message.OrderId);
await _localDynamoRepo.SaveAcceptedOrderAsync(message, order);
return true;
}

因此指南是,由于第一个操作“执行时间可能超过 50 毫秒”,因此应该使用异步和等待。 (1)

但是第二个,快速操作呢?这两个论点中哪个是正确的:

不要让它异步:它不符合 50 毫秒的标准,不值得开销。

Do make it async:开销已经被之前的操作支付了。已经存在基于任务的异步,值得使用。

1) http://blog.stephencleary.com/2013/04/ui-guidelines-for-async.html

最佳答案

the unimportant details are that it runs on EC2 instances in AWS, processing messages on an SQS queue

实际上,我认为这是一个重要的细节。因为这不是 UI 应用程序;它是一个服务器应用程序。

the guidance is that since the first operation "could take longer than 50 milliseconds to execute"

本指南仅适用于 UI 应用程序。因此,50 毫秒准则在这里毫无意义。

Which of these two arguments is correct

异步与速度无关。这是关于释放线程。 UI 应用程序的 50 毫秒准则就是释放 UI 线程。在服务器端,async 是关于释放线程池线程。

问题是您想要/需要多少可扩展性?如果您的后端是可扩展的,那么我通常推荐 async,因为这样可以释放线程池线程。这使您的 Web 应用程序更具可扩展性,并且能够更快地响应负载变化。但只有当您的后端可以随着您的网络应用程序扩展时,这才会给您带来好处。

关于c# - 如果该方法已经是异步的,我是否应该进行快速异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38118051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com