【问题标题】:Why Microsoft developed async functions instead of changing the regular ones [closed]为什么微软开发异步功能而不是更改常规功能[关闭]
【发布时间】:2014-12-30 00:18:49
【问题描述】:

如果我们可以使用异步版本 (executenonqueryasync) +“await”关键字来执行和等待响应,那么使用“同步函数”例如 ExecuteNonquery 是否有理由或好处?

也就是说,使用“executenonqueryasync”函数+await命令代替使用旧的“executenonquery”函数在性能或其他方面是否有劣势?

【问题讨论】:

  • 这样所有现有的数百万行代码都不会中断?
  • 你不能总是使用异步。并且不适合在任何地方使用它。它应该在需要时使用。
  • 为什么我不能总是使用异步函数和“await”关键字来代替常规的非异步函数?
  • 所以你说的是你认为微软应该让每个人都为 .NET 4.5 更新他们的所有代码,而不是决定让现有代码做同样的事情,而是提供异步替代。 (有时同步方法确实是最简单的解决方案。)
  • 我完全听不懂你在说什么,但听起来你仍然认为他们应该破坏每个人的代码,迫使每个人要么使用await或更改他们正在调用的方法。这不是一个好主意。向后兼容性非常重要。

标签: c# .net c#-5.0


【解决方案1】:

您不能 await 一个标准方法 - 您只能 await 一个 Task(或带有 GetAwaiter 的任何东西),这意味着必须编写新方法以适应新模式。

至于不更改旧方法或只是在每次长方法调用时推荐await Task.Yield()beefore 的模式,请注意.NET 框架中有很多 被贬低的代码片段(@987654321 @) 来处理旧程序——就像任何好的执行平台一样,.NET 非常关心保留遗留支持。如果每个使用 .NET 的人都不得不担心每隔几个月就需要重新编译所有东西,因为 MS 改变了一些东西,他们就不会继续使用 .NET。

另一个不改变现有方法的好理由是该模式不能一直使用,每次。有很多地方需要严格控制线程(包括 WPF、AutoCAD 插件在内的 UI 框架)以防止异常影响代码——避免async/await 更容易处理。

【讨论】:

  • 好吧,您只能等待提供适当的GetAwaiter 方法和适当的返回类型的东西。 await 是基于模式的。
  • 非常真实!我会将其整合到我的答案中。
  • @Aravol ,为什么我们应该使用带有异步函数的 await 而不是微软可能会像异步一样将其更改为“释放线程”的常规函数​​?这就是问题...
  • @Omtechguy 见最后一段 - “释放线程”意味着它必须返回或在新线程上操作,这在某些情况下是不可接受的。
  • 谢谢!!!现在我明白了!
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多