【问题标题】:Not using await when you don't care about the result当您不关心结果时不使用等待
【发布时间】:2021-06-17 14:35:57
【问题描述】:

我在 IIS 上使用堆栈交换 redis 库。这是一个非常笼统的问题,我还没有找到答案。

如果我在不关心对 redis 调用的响应的情况下记录分析,我是否可以执行异步说字符串增量并且永远不要等待它,并相信它会在我的请求完成时完成并且不会被取消\终止等?

目标是减少客户端等待呈现响应的时间。

【问题讨论】:

  • " 并相信它会完成" - 不。但你不在乎结果,所以你不在乎它是否完成,对吧?
  • 只需在某种后台工作人员中运行任务。 (在 asp.net 核心中,“托管服务”应该是最简单的解决方案)
  • @FranzGleichmann 在这种情况下,有一个非常更简单的方法来实现这个目标......
  • 真的。但是,对于“确保完成”的用例,必须某种的方式等待结果。
  • 我真正的意思是,如果这些调用在 99% 的时间内完成,我不在乎是否有一些被错过,问题更多的是我的网络服务器或 AWS lambda 会在请求完成后以某种方式取消它们已处理或它们会在后台运行,我可以假设它们大部分时间都会完成工作。

标签: c# stackexchange.redis


【解决方案1】:

在 SE-Redis 库中,有一个专门针对此的功能:“即发即弃”。几乎每个操作都接受一个可选的CommandFlags 参数:指定CommandFlags.FireAndForget(如果您已经传递了另一个标志,则使用“或”(|)进行组合)-您的命令将被发送,但本地方法将立即返回。您不应该真正查看它,但该方法将立即返回声明类型的默认值。最后,使用 non-async API 可能更容易,这样编译器就不会不必要地提示您 await 它(尽管再次说明:它实际上并不是真正的异步案例)。

【讨论】:

  • 根据您的经验,当这种情况发生在网络服务器或 lambda 上下文中时,如果它们碰巧仍以某种方式处于队列中,它们不会在请求完成时中止?
猜你喜欢
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多