当前位置: 首页 > news >正文

齐河县建设局网站如何处理脓包痘痘

齐河县建设局网站,如何处理脓包痘痘,网站推广服务网,网站添加属性PS#xff1a;异步编程的本质就是新开任务线程来处理。 约定#xff1a;异步的方法名均以Async结尾。 实际上呢#xff0c;异步编程就是通过Task.Run()来实现的。 了解线程的人都知道#xff0c;新开一个线程来处理事务这个很常见#xff0c;但是在以往是没办法接收线程里… PS异步编程的本质就是新开任务线程来处理。 约定异步的方法名均以Async结尾。 实际上呢异步编程就是通过Task.Run()来实现的。 了解线程的人都知道新开一个线程来处理事务这个很常见但是在以往是没办法接收线程里面返回的值的。所以这时候就该await出场了await从字面意思不难理解就是等待的意思。 执行await的方法必须是async修饰的并且是Task的类型。 异步执行后返回的信息存储在result属性中。但并非主进程就会卡在await行的代码上执行到await方法之后主线程继续往下执行无需等待新的线程执行完再继续。只有当需要用到新线程返回的result结果时此时主进程才会等待新线程执行完并返回内容。也就是说若无需用到新线程返回的结果那么主进程不会等待。 async和await呢返回类型就3种void、Task、TaskTResult。 1、void 如果在触发后你懒得管请使用 void。 void返回类型主要用在事件处理程序中一种称为“fire and forget”触发并忘记的活动的方法。除了它之外我们都应该尽可能是用Task作为我们异步方法的返回值。 返回void意味着不能await该异步方法即可能出现线程阻塞并且也无法获取exception抛出的异常通常这些异常会导致我们的程序失败如果你使用的是Task和TaskTResultcatch到的异常会包装在属性里面调用方法就可以从中获取异常信息并选择正确的处理方式。 2、Task 你如果只是想知道执行的状态而不需要一个具体的返回结果时请使用Task。与void对比呢Task可以使用await进行等待新线程执行完毕。而void不需要等待。 3、TaskTResult  当你添加async关键字后需要返回一个将用于后续操作的对象请使用TaskTResult。 主要有两种方式获取结果值一个是使用Result属性一个是使用await。他们的区别在于如果你使用的是Result它带有阻塞性即在任务完成之前进行访问读取它当前处于活动状态的线程都会出现阻塞的情形一直到结果值可用。所以在绝大多数情况下除非你有绝对的理由告诉自己否则都应该使用await而不是属性Result来读取结果值。   接下来我们来看个例子在上一章的基础上我们添加异步的方法。 首先是仓储层接口 using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks;using TianYa.DotNetShare.Model;namespace TianYa.DotNetShare.Repository {/// summary/// 学生类仓储层接口/// /summarypublic interface IStudentRepository{/// summary/// 根据学号获取学生信息/// /summary/// param namestuNo学号/param/// returns学生信息/returnsStudent GetStuInfo(string stuNo);/// summary/// 根据学号获取学生信息异步/// /summary/// param namestuNo学号/param/// returns学生信息/returnsTaskStudent GetStuInfoAsync(string stuNo);} } 接着是仓储层实现 using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks;using TianYa.DotNetShare.Model;namespace TianYa.DotNetShare.Repository.Impl {/// summary/// 学生类仓储层/// /summarypublic class StudentRepository : IStudentRepository{/// summary/// 根据学号获取学生信息/// /summary/// param namestuNo学号/param/// returns学生信息/returnspublic Student GetStuInfo(string stuNo){//数据访问逻辑此处为了演示就简单些var student new Student();switch (stuNo){case 10000:student new Student() { StuNo 10000, Name 张三, Sex 男, Age 20 };break;case 10001:student new Student() { StuNo 10001, Name 钱七七, Sex 女, Age 18 };break;case 10002:student new Student() { StuNo 10002, Name 李四, Sex 男, Age 21 };break;default:student new Student() { StuNo 10003, Name 王五, Sex 男, Age 25 };break;}return student;}/// summary/// 根据学号获取学生信息异步/// /summary/// param namestuNo学号/param/// returns学生信息/returnspublic virtual async TaskStudent GetStuInfoAsync(string stuNo){return await Task.Run(() this.GetStuInfo(stuNo));}} } 然后是服务层接口 using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks;using TianYa.DotNetShare.Model;namespace TianYa.DotNetShare.Service {/// summary/// 学生类服务层接口/// /summarypublic interface IStudentService{/// summary/// 根据学号获取学生信息/// /summary/// param namestuNo学号/param/// returns学生信息/returnsStudent GetStuInfo(string stuNo);/// summary/// 根据学号获取学生信息异步/// /summary/// param namestuNo学号/param/// returns学生信息/returnsTaskStudent GetStuInfoAsync(string stuNo);} } 再接着是服务层实现 using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks;using TianYa.DotNetShare.Model; using TianYa.DotNetShare.Repository;namespace TianYa.DotNetShare.Service.Impl {/// summary/// 学生类服务层/// /summarypublic class StudentService : IStudentService{/// summary/// 定义仓储层学生抽象类对象/// /summaryprotected IStudentRepository StuRepository;/// summary/// 空构造函数/// /summarypublic StudentService() { }/// summary/// 构造函数/// /summary/// param namestuRepository仓储层学生抽象类对象/parampublic StudentService(IStudentRepository stuRepository){this.StuRepository stuRepository;}/// summary/// 根据学号获取学生信息/// /summary/// param namestuNo学号/param/// returns学生信息/returnspublic Student GetStuInfo(string stuNo){var stu StuRepository.GetStuInfo(stuNo);return stu;}/// summary/// 根据学号获取学生信息异步/// /summary/// param namestuNo学号/param/// returns学生信息/returnspublic virtual async TaskStudent GetStuInfoAsync(string stuNo){return await StuRepository.GetStuInfoAsync(stuNo);}} } 最后进行控制器中的调用 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using TianYa.DotNetShare.CoreAutofacDemo.Models;using TianYa.DotNetShare.Service; using TianYa.DotNetShare.Repository; using TianYa.DotNetShare.Repository.Impl;namespace TianYa.DotNetShare.CoreAutofacDemo.Controllers {public class HomeController : Controller{/// summary/// 定义仓储层学生抽象类对象/// /summaryprivate IStudentRepository _stuRepository;/// summary/// 定义服务层学生抽象类对象/// /summaryprivate IStudentService _stuService;/// summary/// 定义服务层学生抽象类对象/// 属性注入访问修饰符必须为public否则会注入失败。/// /summarypublic IStudentService StuService { get; set; }/// summary/// 定义仓储层学生实现类对象/// 属性注入访问修饰符必须为public否则会注入失败。/// /summarypublic StudentRepository StuRepository { get; set; }/// summary/// 通过构造函数进行注入/// 注意参数是抽象类而非实现类因为已经在Startup.cs中将实现类映射给了抽象类/// /summary/// param namestuRepository仓储层学生抽象类对象/param/// param namestuService服务层学生抽象类对象/parampublic HomeController(IStudentRepository stuRepository, IStudentService stuService){this._stuRepository stuRepository;this._stuService stuService;}public IActionResult Index(){var stu1 StuRepository.GetStuInfo(10000);var stu2 StuService.GetStuInfo(10001);var stu3 _stuService.GetStuInfo(10002);var stu4 _stuRepository.GetStuInfo(1003);string msg $学号10000姓名{stu1.Name}性别{stu1.Sex}年龄{stu1.Age}br /;msg $学号10001姓名{stu2.Name}性别{stu2.Sex}年龄{stu2.Age}br/;msg $学号10002姓名{stu3.Name}性别{stu3.Sex}年龄{stu3.Age}br/;msg $学号10003姓名{stu4.Name}性别{stu4.Sex}年龄{stu4.Age}br/;return Content(msg, text/html, System.Text.Encoding.UTF8);}public async TaskIActionResult Privacy(){var stu await _stuService.GetStuInfoAsync(10000);return Json(stu);}[ResponseCache(Duration 0, Location ResponseCacheLocation.None, NoStore true)]public IActionResult Error(){return View(new ErrorViewModel { RequestId Activity.Current?.Id ?? HttpContext.TraceIdentifier });}} } 至此完成处理我们来访问一下/home/privacy看看是否正常 可以看出是正常的 下面我们演示一下什么时候需要用到result属性 //用了await则不需要Result属性 public async TaskIActionResult Privacy() {var stu await _stuService.GetStuInfoAsync(10000);return Json(stu); } //没有用await则需要Result属性 public async TaskIActionResult Privacy() {var stu _stuService.GetStuInfoAsync(10000).Result;return Json(stu); } 至此我们的异步编程就讲解完了。 总结 1、尽量优先使用TaskTResult和Task作为异步方法的返回类型。 2、如果用了await则方法必须使用async来修饰并且是Task的类型。 demo源码 链接https://pan.baidu.com/s/1Wb0Mebm-nh9YFOaYNLwO-g 提取码1ayv   参考博文https://www.cnblogs.com/fei686868/p/9637310.html 版权声明如有雷同纯属巧合如有侵权请及时联系本人修改谢谢 转载于:https://www.cnblogs.com/xyh9039/p/11391507.html
http://www.pierceye.com/news/707013/

相关文章:

  • python建立简易网站网站界面设计的分类有哪几种
  • 网络规划师考哪些内容优化设计卷子答案
  • 邢台网站关键词优化wordpress弹窗下载
  • 晋城市企业网站腾讯qq官网登录入口
  • 怎么给网站在百度地图上做爬虫一家专门做灯的网站
  • 河南焦作有做网站开发的公司吗xampp安装wordpress
  • python购物网站开发流程图win淘宝客wordpress主题模板
  • 江苏省建设执业网站个人做淘宝客网站有哪些
  • 浙江省建设厅门户网站咨询公司是干什么的
  • 哪个网站上可以做初中数学题wordpress 网校插件
  • html写手机网站制作网页用什么语言
  • 一站式网站建设价格百度网站
  • 招商网站建设多少钱企业形象墙
  • 医疗设备响应式网站免费素材库
  • 服务器如何搭建php网站网页美工设计从入门到精通
  • 淘宝的网站建设情况做企业平台的网站有哪些
  • 深圳网站建设公司设计公司做网站排名有用吗
  • 企业营销型网站建设厂家 天堂资源地址在线官网
  • 编写这个网站模板要多少钱便宜做网站公司
  • asp企业网站源码下载网页制作基础教程田田田田田田田田
  • 网站标题title怎么写网站建设建设公司有哪些
  • 辽宁移动网站网站域名注册费用
  • 深圳建网站兴田德润专业电商店铺首页设计
  • 网站推广的工作内容芜湖做网站的客户
  • 求一些做里番的网站wordpress新闻快讯插件
  • 网站加速器下载公司网页设计思路
  • 数据库网站开发memcached wordpress 慢 卡
  • 上市设计网站软件商城官网
  • 网站建设是什么科目查找5个搜索引擎作弊的网站
  • 佛山市锵美装饰有限公司网站建设案例微信商城小程序开发一般需要多少钱