c# - 使用 async/await 是 Web 服务的好主意吗?

标签 c# web-services concurrency

我有许多 Web 服务,当它们被调用时,它们需要在返回之前调用其他外部服务以获取信息。这一切都是同步完成的。

因此,如果我有一个返回电影列表的电影 GET 服务,Web 服务逻辑将等待电影提供者的外部服务返回数据,处理它并返回 GET 的数据。

将外部服务调用包装在任务中并使用异步/等待模型是否会证明有任何好处?处理 GET 的初始线程不会仍然只是被阻塞以等待响应,还是会被释放以处理其他传入的服务调用?

最佳答案

Would it prove to be any benefit by wrapping the external service call in a Task and use the async/await model?

包装同步调用可能不会提供太多好处 - 但如果外部服务也提供真正的异步 API,您可以获得显着的好处。

Wouldn't the initial thread handling the GET still just be blocked waiting for the response or would it be freed up to handle other incoming service calls?

目前我不知道 WCF 对异步的支持是什么样的,但是应该可以编写所有这些,这样您只有在有实际工作要做时才让任何线程处于事件状态完成...这样您就可以在几个线程上一次处理数百个请求。如果您的任何外部服务调用相对较慢,这一点尤为重要。

所以基本上,的收获,但你应该分别看看两个方面:

  • 首先为您正在编写的网络服务类型提供异步支持。您能否在 WCF 中使用异步方法来表达您的服务?
  • 您要调用的外部服务

这些方面中的每一个都可以提供好处,但如果两个方面都得到完全支持,您将获得最大的好处 - 并最终得到最简单的代码。

关于c# - 使用 async/await 是 Web 服务的好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16913149/

相关文章:

c# - 在 IIS 上运行时,Web 应用程序无法与 Web 服务通信

java - run 方法内部的线程状态冲突;为什么线程状态不是 "RUNNING"

ios - 为什么我应该在 main 中为串行队列创建上下文并在 start 中为并发队列创建上下文?

c# - 有人可以在继承Windows控件时解释此LinkDemand警告吗?

c# - 读取使用 FileUpload 控件上传的 Excel 文件而不将其保存在服务器上

c# - 每个都有一个动态列表?

javascript - 如何将 Web 服务作为字符串传递给 javascript?

php - 通过我的 REST API 连接 Google REST API 无效

java - 用户并发编辑对象的并发问题

c# - 我应该在哪里创建用户 session ?