c# - 一点一点地更改 asp.net 应用程序以使用异步

标签 c# asp.net asynchronous async-await deadlock

我们有一个 asp.net 应用程序,它不使用异步或并行方法(除了一些 owin 中间件)。

我想开始使用一些使用异步等待语法的方法的异步版本。

我知道混合异步和同步操作存在危险,因为这可能会导致死锁。

一次重写整个应用是不可能的。

我应该从哪里开始?是使 Controller Action 异步并按我的方式工作的安全方法吗?或者反过来?

是否有一些我可以一路观察的明确警告标志,例如:“永远不要让同步方法调用异步方法,但让异步调用同步没问题”

最佳答案

Where should I Start? is the safe way to do it to make the controllers actions async and work my way down? or the other way around?

我建议从“叶子”开始并创建“垂直分区”。也就是说,在服务或数据访问层内,识别 I/O 绑定(bind)操作。然后创建那些使用自然异步 API 的方法的异步副本。一旦你有了这些,然后继续“向上”你的层,创建异步副本,直到你可以使 Controller 操作异步。

您最终会遇到大量代码重复 - 同一方法的同步和异步版本 - 但这只是暂时的。一旦所有其他代码仅使用方法的异步版本,就可以删除同步版本。

关于c# - 一点一点地更改 asp.net 应用程序以使用异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28581566/

相关文章:

c# - 如何创建一个简单的本地 SQL 数据库并使用 C# 向其中插入值?

c# - 如何在 C#.NET 中不同类型的对象之间进行深度复制

c# - EntityFramework 和延迟加载

c# - 在 C# 中为 DataGridViewButtonColumn 设置图像

asp.net - Web.config自定义错误模式冲突

c++ - 为什么 std::async 复制它的 const & 参数?

multithreading - 带有异步 block 的串行调度队列

asp.net - 在 IIS URL 重写 2 中重新处理重写的 URL 时出错

c# - 0,0.0 或 100.20 或 0.99 或 9999.99 的正则表达式

multithreading - 与 FireMonkey 并行的多个 REST 请求