asp.net – 异步操作方法和IO完成端口
发布时间:2020-12-16 06:49:50 所属栏目:asp.Net 来源:网络整理
导读:当我们的应用程序依赖外部服务时,使用异步编程很重要的原因之一是允许ASP.NET使用IO完成端口,而不是阻止等待外部服务响应的线程,ASP.NET可以将执行停放在IO完成端口并使用该线程来访问另一个请求,只要外部服务响应,然后ASP.NET再次获取该执行并恢复它.这样,
当我们的应用程序依赖外部服务时,使用异步编程很重要的原因之一是允许ASP.NET使用IO完成端口,而不是阻止等待外部服务响应的线程,ASP.NET可以将执行停放在IO完成端口并使用该线程来访问另一个请求,只要外部服务响应,然后ASP.NET再次获取该执行并恢复它.这样,没有线程被阻塞.
异步方法的一个例子是: [HttpPost] public async Task<ActionResult> Open(String key) { Foo foo= await _externalService.GetFoo(key); return View(foo); } 但是,如果我们对外部服务使用多个请求会发生什么? ASP.NET如何处理它? [HttpPost] public async Task<ActionResult> Open() { List<Task<Foo>> tasks = new List<Task<Foo>>(); foreach (var key in this.Request.Form.AllKeys) tasks.Add(_externalService.GetFoo(key)); var foos = await Task.WhenAll(tasks); Foo foo = null; foreach (var f in foos) { if (foo == null && f != null) foo = f; else foo.Merge(f); } return View(foo); } 它还在使用IO完成端口吗?或者因为Task.WhenAll阻塞了一个线程? 解决方法
它仍然使用I / O完成端口. WhenAll是异步的,不会阻塞线程.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 如何从基本控制器获取操作名称?
- asp.net-mvc – ASP.NET MVC – 用于ICollection的EditorTe
- asp.net-mvc – 对移动设备进行内容调整的方法
- 如何使用ASP.NET C#设置html输入类型文本值?
- asp.net-mvc-4 – 使用knockout.js我需要从服务器调用更新我
- asp.net-mvc – ASP.NET MVC应用程序架构“指南”
- asp.net-mvc-3 – 当两个网格位于同一页面时进行排序
- asp.net-mvc-3 – asp.net mvc 3应用程序中的默认sessionSt
- Castle DynamicProxy基本用法(AOP)
- Tensorflow Mnist数据集
推荐文章
站长推荐
- asp.net-web-api – 从局域网中的其他计算机使用
- 浅谈ASP.NET Core中间件实现分布式 Session
- asp.net-mvc-2 – 仅在运行调试器时出现Antiforg
- asp.net-mvc – 可从全局路由访问的ASP.NET MVC3
- asp.net-mvc – 如何从ActionFilter访问ModelSta
- asp.net – 如何添加.aspx页面到现有的MVC 4项目
- 请慎用ASP.Net的validateRequest="false"
- (18)ASP.NET Core 基于现有数据库创建EF模型(
- ASP.NET mvc:如何使用今天的日期自动填充日期字
- ASP.NET 判断微信浏览器
热点阅读