web api接口同步和异步的问题

一般来说,如果一个api 接口带上Task和 async 一般就算得上是异步api接口了。

如果我想使用异步api接口,一般的动机是我在我的方法里面可能使用Task.Run 进行异步的去处理一个耗时的操作。

Q1.如果一个api接口很耗时,比如需要10s,会影响我的前端展示吗?

--不会。很多js可以异步请求api接口,当接口返回数据时,通过回调方法,显示数据。

Q2.对于存在耗时的api接口,使用异步api接口(接口内部可能使用 Task.Run 异步操作)一定可以提高响应吗?

--不一定。举个例子:

public async Task<IEnumerable<string>> Get(string s)
        {

            Log.InfoFormat(ITCloudLogType.common, "Begin Request.thread id:{0},time:{1},requestId:{2}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToLongTimeString(), this.ControllerContext.Request.GetCorrelationId().ToString());

           await Task.Run(()=>Job1(s));

            Log.InfoFormat(ITCloudLogType.common, "End Request.id:{0},time:{1},requestId:{2}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToLongTimeString(), this.ControllerContext.Request.GetCorrelationId().ToString());
            return new string[] { "value1", "value2" };
        }

        private void Job1(string s)
        {
             return;
        }

        private int Job2()
        {
            return 2;
        }

情况1.假定Job1非常耗时,而且Job1的结果对下文的结果输出并没有什么影响,这个时候如果使用

     await Task.Run(()=>Job1(s)); 就显得非常不明智。可以去掉await关键字,把Job1放在一个异步的现场中去执行,而程序继续往下走,避免不必要的等待,对接口加速。

 情况2. 更为常见的:Job1的结果是下文所需要的。     这种情况下,使用await Task.Run(()=>Job1(s));的意义就不大了。同步和异步有着同样的效率。
时间: 2024-08-07 08:25:52

web api接口同步和异步的问题的相关文章

Swagger UI教程 API 文档神器 搭配Node使用 web api 接口文档 mvc接口文档

两种方案 一.Swagger 配置 web Api 接口文档美化 二.通过NodeJS 发布Swagger UI 配置api 文档 先说一下简单的 Swagger 配置 web Api  Swagger-UI本身只提供在线测试功能,要集成它还需要告诉它本项目提供的各种服务和参数信息.这里就需要一些工作量了,不过好在许多第三方库已经给我们完成了这一工作.我这里用的是Swashbuckle,使用它也比较简单,直接使用Nuget添加其程序包即可: 1.初始化包  PM> Install-Package

使用RAP2和Mock.JS实现Web API接口的数据模拟和测试

最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微信小程序或者APP团队大家可以同步开发,在最初约定一些接口的输入JSON数据和输出JSON数据,但是随着项目的进度开展,这些数据结构一直有所变化,那么我们模拟的JSON数据格式也需要协同变化,但是很不幸既然大家忙着开发,接口协调的事情肯定优先级没那么高,即使每次记得协调接口数据,也不一定能够完全一致

微信小程序的Web API接口设计及常见接口实现

微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们设计和编写Web API平台是非常重要的,通过这个我们可以实现数据的集中控制和管理,本篇随笔介绍基于Asp.NET MVC的Web API接口层的设计和常见接口代码的展示,以便展示我们常规Web API接口层的接口代码设计.参数的处理等内容. 1.Web API整体性的架构设计 我们整体性的架构设计

Web API接口 安全验证

在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架,本篇继续这个主题,介绍如何利用ASP.NET Web API 来设计Web API层以及相关的调用处理. 1.Web API的接口访问分类 Web API接口的访问方式,大概可以分为几类: 1)一个是使用用户令牌,通过Web API接口进行数据访问.这种方式,可

Web请求中同步与异步的区别

普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕. 举个生动的例子吧: 同步就是你叫我去吃饭,我听到了就和你去吃饭:如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭. 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭. 所以,要

如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问。

由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题. 刚开始没做任何处理,用jsonp的方式调用 web api 接口,总是报一个错误,如下: 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignature":"嫁人要嫁程序员,钱多话少死得早"} 然而,JSONP请求期望得到这样的JSON

Web API接口设计经验总结

在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理>也进行了总的介绍,在经过我的大量模块实践并成功运行后,总结了这篇随笔,希望对大家有所帮助. 1.在接口定义中确定MVC的GET或者POST方式 由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时

整合微信小程序的Web API接口层的架构设计

在我前面有很多篇随笔介绍了Web API 接口层的架构设计,以及对微信公众号.企业号.小程序等模块的分类划分.例如在<C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系>介绍了相关模块的划分,在<基于微信小程序的系统开发准备工作>介绍了Web API的架构设计思路.本篇随笔对之前介绍的架构内容进行统一的调整更新,以便更加方便实际项目的应用开发,以期达到统一.重用.清晰的目的. 1.公众号.企业号.小程序模块的划分 我们知道,目前微信企业应用,分为公众号.企业号(企业

Winform混合式开发框架访问Web API接口的处理

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在我的混合式开发框架里面,集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序.Web网站.移动端APP等多种接入方式,Web API的处理方式和微信提供的接口处理规则类似,也是通