2020/11/3

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 2020/11/3
  • 前言
  • 一、异步补充
    • 1.异步中的异常处理
  • 二、HTTP简介
    • 1.Http协议基础概念篇
    • 2.HTTP进阶篇
  • 三、Lambda表达式回顾
  • 总结

前言

本文对异步编程的一个补充,HTTP协议的一个记录


提示:以下是本篇文章正文内容,下面案例可供参考

一、异步补充

1.异步中的异常处理

1.await 表达式也可以使用 try…catch…finally 结构。
代码如下(示例):

namespace 异步中的异常处理
{class Program{static void Main(string[] args){Task t = DoExceptionAsync();t.Wait();Console.WriteLine($"{nameof(t.Status)}:{t.Status}");//任务状态标识,nameof作用接收元素,返回元素名称Console.WriteLine($"{nameof(t.IsCompleted)}:{t.IsCompleted}"); //任务是否完成状态标识Console.WriteLine($"{nameof(t.IsFaulted)}:{t.IsFaulted}");//任务是否有未处理的异常标识Console.ReadKey();}/// <summary>/// 异常操作/// </summary>/// <returns></returns>private static async Task DoExceptionAsync(){try{await Task.Run(()=> { throw new Exception(); });}catch (Exception){Console.WriteLine($"{nameof(DoExceptionAsync)}出现异常!");}}}
}


 【分析】await 表达式位于 try 块中,按普通的方式处理异常。但是,为什么图中的状态(Status)、是否完成标识(IsCompleted)和是否失败标识(IsFaulted)分别显示:运行完成(RanToCompletion) 、已完成(True) 和 未失败(False) 呢?因为:任务没有被取消,并且异常都已经处理完成!
 show:从上述列子中反应, try…catch…finally 结构同样在异步编程中实现

二、HTTP简介

1.Http协议基础概念篇

HTTP简介:
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据。
Http工作原理:
1.HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
2.Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
3.Web服务器根据接收到的请求后,向客户端发送响应信息。
4.HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
Http三点注意事项:
1.HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
2.HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
3.HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
1.2在TCP/IP协议栈中的位置
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS(附图)
默认HTTP的端口号为80,HTTPS的端口号为443。
1.3HTTP的请求响应模型
HTTP协议永远都是客户端发起请求,服务器回送响应(附图)
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系(就是他不会记住上一次客户端与服务器沟通内容)
1.4HTTP工作流程
一次HTTP操作称为一个事物,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

2.HTTP进阶篇

2.1.1建立连接方面:HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。
注意:在同一个TCP连接中,新的请求需要等上次请求收到响应后,才能发送。
2.1.2请求方法:
GET请求指定的页面信息,并返回实体主体。
HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP /1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
2.1.3Http消息结构
1.HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
2.一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
3.一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据
4.HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接
5.一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。
2.1.4客户端请求消息与服务器响应消息
1.客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,
2.服务器HTTP的响应也是由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

2.1.5Http响应状态码:
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除400——错误请求,如语法错误
401——未授权
HTTP 401.1 - 未授权:登录失败
  HTTP 401.2 - 未授权:服务器配置问题导致登录失败
  HTTP 401.3 - ACL 禁止访问资源
  HTTP 401.4 - 未授权:授权被筛选器拒绝
HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
402——保留有效ChargeTo头响应
403——禁止访问
HTTP 403.1 禁止访问:禁止可执行访问
  HTTP 403.2 - 禁止访问:禁止读访问
  HTTP 403.3 - 禁止访问:禁止写访问
  HTTP 403.4 - 禁止访问:要求 SSL
  HTTP 403.5 - 禁止访问:要求 SSL 128
  HTTP 403.6 - 禁止访问:IP 地址被拒绝
  HTTP 403.7 - 禁止访问:要求客户证书
  HTTP 403.8 - 禁止访问:禁止站点访问
  HTTP 403.9 - 禁止访问:连接的用户过多
  HTTP 403.10 - 禁止访问:配置无效
  HTTP 403.11 - 禁止访问:密码更改
  HTTP 403.12 - 禁止访问:映射器拒绝访问
  HTTP 403.13 - 禁止访问:客户证书已被吊销
  HTTP 403.15 - 禁止访问:客户访问许可过多
  HTTP 403.16 - 禁止访问:客户证书不可信或者无效
HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。
HTTP 500 - 内部服务器错误
  HTTP 500.100 - 内部服务器错误 - ASP 错误
  HTTP 500-11 服务器关闭
  HTTP 500-12 应用程序重新启动
  HTTP 500-13 - 服务器太忙
  HTTP 500-14 - 应用程序无效
  HTTP 500-15 - 不允许请求 global.asa
  Error 501 - 未实现
HTTP 502 - 网关错误
2.1.6对于HTTP响应头信息,HTTP content-type查看文档,这里不做归纳。

三、Lambda表达式回顾

  1. “Lambda 表达式”(lambda expression)是一个匿名函数,可以表示为委托的代码,或者表示为表达式 树的代码,它所表示的表达式树可以编译为委托。 Lambda 表达式的特定委托类型取决于其参数和返回 值。不返回值的 Lambda 表达式对应于 Action 委托,具体取决于其参数数量。 返回值的 Lambda 表达式对应于 Func 委托,具体取决于其参数数量。
  2. Lambda 表达式广泛用于:
    将要执行的代码传递给异步方法,例如 Task.Run(Action)。
    编写 LINQ 查询表达式。
    创建表达式树。
  3. 从下面代码为我们可以看出c#一步步的升级,带给我们的是编程上的优美,简洁,可读性强,
    Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”具体形式:(input - parameters) => expression
    4.下列代码,我们由委托—>转变到Lambda表达式的过程:
    代码如下(示例):
namespace LambdaDemo
{delegate int CalculateHandler(int x, int y);class Program{static void Main(string[] args){//“Lambda 表达式”(lambda expression)是一个匿名函数,可以表示为委托的代码,或者表示为表达式树的代码,它所表示的表达式树可以编译为委托。 Lambda 表达式的特定委托类型取决于其参数和返回值。不返回值的 Lambda 表达式对应于 Action 委托,具体取决于其参数数量。 返回值的 Lambda 表达式对应于 Func 委托,具体取决于其参数数量。//Lambda 表达式广泛用于://将要执行的代码传递给异步方法,例如 Task.Run(Action)。//编写 LINQ 查询表达式。//创建表达式树。//接下来,我们由委托--->转变到Lambda表达式的过程//从下面代码为我们可以看出c#一步步的升级,带给我们的是编程上的优美,简洁,可读性强,//Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”具体形式:(input - parameters) => expressionTest();Console.ReadKey();}static int Sum(int x, int y){return x + y;}#region 委托的实现static void Test(){CalculateHandler sumHandler = new CalculateHandler(Sum);Console.WriteLine(sumHandler(1, 2).ToString());}#endregion#region 匿名方法的实现static void Test(){CalculateHandler sumHandler = delegate (int x, int y) { return x + y; };Console.WriteLine(sumHandler(1, 2).ToString());}#endregion#region Lambda表达式的实现static void Test(){CalculateHandler sumHandler = (x, y) => x + y;Console.WriteLine(sumHandler(1, 2).ToString());}#endregion}
}

5、Lambda表达式要点总结
1、Lambda表达式是一种表示匿名方法的更短的方法。

2、Lambda表达式语法:parameters =>正文表达式

3、Lambda表达式可以在()中具有零个或多个参数。

4、Lambda表达式可以在大括号{}中的正文表达式中有一条或多条语句

5、Lambda表达式可以分配给Func,Action或Predicate委托。

6、Lambda表达式可以以类似的方式调用委托。
二. 异步与Lambda表达式的初次接入
代码如下(示例):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace winformLambdaDemo
{public partial class Form1 : Form{//使用 async 修饰符可将方法、lambda 表达式或匿名方法指定为异步。public Form1(){InitializeComponent();button1.Click += async (sender, e) =>{await ExampleMethodAsync();textBox1.Text += "\r\nControl returned to Click event handler.\n";};}private async Task ExampleMethodAsync(){await Task.Delay(1000);//Task.Delay方法只会延缓异步方法中后续部分执行时间,当程序执行到await表达时,一方面会立即返回调用方法,执行调用方法中的剩余部分,这一部分程序的执行不会延长。另一方面根据Delay()方法中的参数,延时对异步方法中后续部分的执行。}}
}

总结

安静且高校一点就好7相关推荐

  1. 安静且高效一点就好3

    今天是第三天啦 文章目录 今天是第三天啦 前言 一.静态与非静态 二.继承 1.里氏转换原则以及is as运算符的基本使用 二.多态 1.虚方法 2.抽象类 3.接口 3.接口的特点 总结 前言 静态 ...

  2. 安静且高效一点就好1

    2020/10/27C#开启新征程 文章目录 2020/10/27C#开启新征程 前言 一.类 1.类的定义 2.访问修饰符以及属性 3.构造函数 3.this关键字的使用 二.字符串 三.继承 总结 ...

  3. 安静且高效一点就好8

    2020/11/4 文章目录 2020/11/4 前言 一.Linq 二.对异步的一个补充(Task) 总结 前言 提示:上午对前面所学知识的一个复习,对前面的一些不足进行一个补充,下面也在对前面的补 ...

  4. 日语二级文法详解(完整版)

    1)~あげく/~あげくに困ったあげく「あげく」接在动词过去时或「名詞+の」的形式后面,表示一种结果,含有"最后终于--"的意思.前半句通常是一个感觉较长的过程,「あげく」表示的结果 ...

  5. Linux 3.0发布

    为什么80%的码农都做不了架构师?>>> Linux 3.0 Released Linux 3.0发布 posted by Thom Holwerda on Fri 22nd Jul ...

  6. 一台25万公里卡罗拉的返老还童记

    最近开了一下亲戚的卡罗拉,这是一台车龄有9年,跑了差不多25万公里的老车.算下来平均每年的行驶里程将近2.8万公里,对于一台普通家用车来说用车强度是挺强的.一直以来,我对身边朋友灌输的用车理念就是&q ...

  7. 写给准备参加秋招的学弟学妹们~一定要来看哦~

    一. 写在前面 这两天找工作不易,由衷感慨,很多书都没早看,所以希望学弟学妹们能多看点书,特别是我们qtech的ACMer们,我们这种acm弱校的ACMer走出来的,acm水平都不行,如果再像我当年那 ...

  8. 人类历史上有过哪些令人毛骨悚然的实验?

    我是杂谈胡侃,不绕圈子,直接说答案,人类历史上令人毛骨悚然的实验,感官剥夺实验算一个(人类大脑会不由自主地创造出十分恐怖的场景).20世纪50年代时,麦吉尔大学的心理学家让学生堵上耳朵.穿上特制的阻断 ...

  9. 写给大一大二大三还在迷惘中的学生

    一. 写在前面 这两天找工作不易,由衷感慨,很多书都没早看,所以希望学弟学妹们能多看点书,特别是我们qtech的ACMer们,我们这种acm弱校的ACMer走出来的,acm水平都不行,如果再像我当年那 ...

最新文章

  1. R语言使用lm构建线性回归模型、并将目标变量对数化实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型系数(coefficient)、模型总结信息(summary)、残差总结信息
  2. ITK:带有离散高斯滤波器的平滑图像
  3. 运维人员mysql如何访问_mysql 运维常见操作
  4. Java PipedInputStream available()方法与示例
  5. java 取消引用_java代码优化——消除过期的对象引用
  6. SSH/SSH客户端介绍、利用SSH访问linux、SSH跟telnet区别
  7. flash打开文件时缺少文字_FLash常见问题
  8. BooKu手机电子书阅读器,正式推出了
  9. CAD技巧—教你快速查看CAD文件信息和文件版本
  10. 深度学习(花书)+ 动手学深度学习(李沐)资料链接整理
  11. 计算机访问周期,访问周期最短的存储器是
  12. 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组解析
  13. 科技日语写作 计算机科学专题,科技进步和人类日语作文
  14. 【支付宝小程序控制硬件①】 申请个人支付宝小程序开发的个人账户,说说那些睬坑日志,集成mqtt协议在支付宝小程序,实现基本通讯!
  15. 用手机远程控制扫描仪
  16. 浅谈电弧光保护在10kV变电站高压室的应用方案
  17. 制作往图片里插入视频,视频添加到图片上播放
  18. PTA 7-10 计算工资
  19. C语言程序设计A重点,【艾学笔记】复习重点之C语言程序设计
  20. QT的Frame背景图片设置自学版

热门文章

  1. 全息透玻璃交互式触摸显示器
  2. json stm8s103 解析_STM8 C语言精品编程100例 PDF 超清版
  3. 工程师应如何仿真并得出结论
  4. 管理学重要著作和人物
  5. 用友“老朋友”,开启新合作!
  6. 远翔升压FP5217。内置MOS大瓦数升压芯片
  7. 正版软件 - 迅捷全能PDF转换助手软件 ,办公必备工具。
  8. 国产微观交通仿真软件TESS NG V2.1 Python二次开发接口版本发布
  9. 新网服务器网站后台怎么登陆,新网域名管理后台
  10. 曲折词缀和python的功能区别_派生词缀与屈折词缀的区别