【发布时间】:2016-06-30 08:42:15
【问题描述】:
我有这段代码(不重要的细节是它在 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 毫秒的时间来执行”,它应该使用 async 和 await。 (1)
但是第二个快速操作呢?这两个论点哪个是正确的:
不要让它异步:它不符合 50ms 标准,不值得开销。
不要让它异步:开销已经由之前的操作支付。已经有基于任务的异步发生了,值得使用。
1) http://blog.stephencleary.com/2013/04/ui-guidelines-for-async.html
【问题讨论】:
标签: c# asynchronous async-await