如果方法已经异步,是否应该使快速操作异步

安东尼

我有这段代码(不重要的细节是它在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毫秒,并且发电机写入耗时约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)

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

不要使其异步:它不符合50ms标准,因此不值得这样做。

使其异步:上一步操作已经支付了开销。已经有基于任务的异步发生,值得使用它。

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

斯蒂芬·克莱里

不重要的细节是它在AWS的EC2实例上运行,在SQS队列上处理消息

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

指导意见是,由于第一个操作“可能需要50毫秒以上的时间才能执行”

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

这两个参数中哪一个是正确的

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

问题是您想要/需要多少可扩展性?如果您的后端是可伸缩的,则通常建议您使用async,因为这样可以释放线程池线程。这使您的Web应用程序更具可扩展性,并且能够更快地响应负载变化。但这只有在后端可以与Web应用程序一起扩展时才给您带来好处。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果方法已经异步,是否应该使快速操作异步

来自分类Dev

如果需要等待连接,是否应该执行主要异步操作?

来自分类Dev

异步操作方法

来自分类Dev

ngStorage是否异步执行操作?

来自分类Dev

库方法:是否异步?

来自分类Dev

如果在异步操作完成之前更改了数据,是否需要取消setState操作?

来自分类Dev

如果我仍然使用TaskCompletionSource实现异步,是否应该返回ValueTask?

来自分类Dev

服务是否应该公开其异步性?

来自分类Dev

异步API是否应该同步抛出?

来自分类Dev

如果有条件地执行Task,异步方法应该怎么做?

来自分类Dev

调用Client时,signaler服务器端方法是否应该异步?

来自分类Dev

创建异步版本时,是否应该始终包括方法的同步版本?

来自分类Dev

异步/等待:使方法异步

来自分类Dev

在.NET Core中返回具有多个InvokeAsync调用的视图组件时,控制器操作是否应该异步

来自分类Dev

对C#异步方法结果执行操作

来自分类Dev

如果我在动作定义中使用异步任务,那么该动作应该与异步相关吗?

来自分类Dev

C#异步套接字方法(BeginSend / BeginReceive等)是否必须是静态的?如果是这样,为什么?

来自分类Dev

异步模块是否总是异步的?

来自分类Dev

如果线程正在等待异步操作完成,.NET Task线程的资源是否会暂时返回到池中?

来自分类Dev

是否可以等待未声明为异步的IO操作?如果没有,我该怎么办?

来自分类Dev

此MVC4 API调用是否应该异步?

来自分类Dev

使方法异步

来自分类Dev

使方法异步

来自分类Dev

如何确定Apple方法是否异步?

来自分类Dev

教义冲洗方法是否异步工作?

来自分类Dev

Invoke方法的调用是否异步?

来自分类Dev

如果链中的第一个方法是异步的,一连串的方法调用(CompletableFuture API)是否会异步执行?

来自分类Dev

ios快速解析:具有异步结果的方法

来自分类Dev

dotnet 3.5快速又脏的异步方法的编写方式

Related 相关文章

  1. 1

    如果方法已经异步,是否应该使快速操作异步

  2. 2

    如果需要等待连接,是否应该执行主要异步操作?

  3. 3

    异步操作方法

  4. 4

    ngStorage是否异步执行操作?

  5. 5

    库方法:是否异步?

  6. 6

    如果在异步操作完成之前更改了数据,是否需要取消setState操作?

  7. 7

    如果我仍然使用TaskCompletionSource实现异步,是否应该返回ValueTask?

  8. 8

    服务是否应该公开其异步性?

  9. 9

    异步API是否应该同步抛出?

  10. 10

    如果有条件地执行Task,异步方法应该怎么做?

  11. 11

    调用Client时,signaler服务器端方法是否应该异步?

  12. 12

    创建异步版本时,是否应该始终包括方法的同步版本?

  13. 13

    异步/等待:使方法异步

  14. 14

    在.NET Core中返回具有多个InvokeAsync调用的视图组件时,控制器操作是否应该异步

  15. 15

    对C#异步方法结果执行操作

  16. 16

    如果我在动作定义中使用异步任务,那么该动作应该与异步相关吗?

  17. 17

    C#异步套接字方法(BeginSend / BeginReceive等)是否必须是静态的?如果是这样,为什么?

  18. 18

    异步模块是否总是异步的?

  19. 19

    如果线程正在等待异步操作完成,.NET Task线程的资源是否会暂时返回到池中?

  20. 20

    是否可以等待未声明为异步的IO操作?如果没有,我该怎么办?

  21. 21

    此MVC4 API调用是否应该异步?

  22. 22

    使方法异步

  23. 23

    使方法异步

  24. 24

    如何确定Apple方法是否异步?

  25. 25

    教义冲洗方法是否异步工作?

  26. 26

    Invoke方法的调用是否异步?

  27. 27

    如果链中的第一个方法是异步的,一连串的方法调用(CompletableFuture API)是否会异步执行?

  28. 28

    ios快速解析:具有异步结果的方法

  29. 29

    dotnet 3.5快速又脏的异步方法的编写方式

热门标签

归档