gpt4 book ai didi

c# - 避免异步在方法签名中传播

转载 作者:行者123 更新时间:2023-11-30 21:40:47 25 4
gpt4 key购买 nike

阻止我在我的 .net 代码中不断使用异步/等待模式的原因是,一旦你创建了一个异步方法,async 关键字就会在我的代码中传播,迫使我将所有方法设为异步。有没有一种模式可以有效地阻止这种情况?

最佳答案

What prevents me from constantly using the async/wait pattern in my .net code is that once you create an async method the async keyword tends to spread thru my code forcing me to make all methods async. Is there a pattern to stop this efficiently?

那么让我问你:你为什么要使用async/await?您需要退后一步,决定是否需要异步代码的好处。如果您确实想要这些好处,那么您的代码必须是异步的。 一旦阻塞了一个线程,您就失去了异步的所有好处。如果您只是要阻塞一个线程,那么真的,为什么要使用异步代码呢?

也就是说,在某些情况下,部分async 堆栈是有意义的。例如,如果您的代码库暂时处于过渡状态。在这种情况下,您可以使用我在 brownfield async 上的文章中描述的一种技巧。 :

  • 直接阻塞(可能导致死锁)。
  • 在线程池线程上阻塞(在不同的线程和不同的上下文中执行代码,可能会导致意外的并行性)。
  • 使用线程池上下文阻塞当前线程(在不同的上下文中执行代码,可能会导致意外的并行性)。
  • 在具有单线程上下文的线程上阻塞(在不同的线程和不同的上下文中执行代码)。
  • 阻塞嵌套消息循环(可能导致意外重入)。

所有这些都是 hack,并且都有不同的缺点。没有适用于所有场景的 hack。

关于c# - 避免异步在方法签名中传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44270633/

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