在线课程笔记—.NET基础
关于学习北京理工大学金旭亮老师在线课程的笔记。
介绍:
在线课程网址:http://mooc.study.163.com/university/BIT#/c
老师个人网站:http://jinxuliang.com/MainWebSite
10.10号开课的,主要有三个课程,其中我最想学习的就是老师最新的那个关于讲解ASP.NET Core的课程。现在推出来一章,昨天我学习了,很是受益(虽然我环境还没安装好,电脑配置是个伤呀)。对于想了解Core相关技术的同学来说很有帮助。(最起码有个参考的地方),其中后面还有关于依赖注入,IOC容器,AngularJS,DDD相关知识的讲解(高大上的知识呀)。据说老师的这个网站就是通过ASP.NET Core技术来创建的。
dynamic类型
在之前的项目中就经常使用这个类型,但是对于这个知识点不是很清楚。今天算是重新学习了。
dynamic类型是动态类型,和我们常规的类型不一样,它是可以改变变量的值的特殊类型。就好比下面的代码一样。
//dynamic是一种动态类型,可以在编译的时候直接改变变量中的值。而不是像常规的类型一样。不可以进行值的改变。
dynamic test = "test1";
Console.WriteLine(test.GetType());
test = 23;
Console.WriteLine(test.GetType());
输出就是俩个不同的类型,在我们的ASP.NET MVC中的ViewBag就是使用的是dynamic类型;(想不到吧>)
下面的例子是在此类型中添加委托方法。同样可以将方法输出。
dynamic myBag = new ExpandoObject();
myBag.intValue = 100;
myBag.message = "hello";
//声明委托方法,str相当与方法的参数。{}中的值就是方法体;
Action<string> act = (str) => { Console.WriteLine(str); };
//将方法赋值给say方法;
myBag.say = act;
Console.WriteLine(myBag.intValue*10);
Console.WriteLine(myBag.message);
myBag.say(myBag.intValue.ToString()); //方法参数为string类型
myBag.say(myBag.message);
开始声明了ExpandoObject()对象;这个是在命名空间System.Dynamic中的,里面就一个方法,意思是表示一个对象,该对象包含可在运行时动态添加和移除的成员(包括属性和方法)。方法是初始化不包含任何成员的新 ExpandoObject。
委托与Lambda表达式
我们先看一些常规的委托是如何实现的。
委托方法的使用:
//1:声明委托
public delegate string SomeDelegateType(int value);
class MyClass
{
//2:定义委托方法
public string process(int value)
{
return value.ToString();
}
}
MyClass ob=new MyClass();
//3:声明委托变量,且为其赋值方法。
SomeDelegateType del = ob.process;
//4:调用委托,这个del其实就相当于process()方法一样。
Console.WriteLine(del(100));
改造后的Lambda表达式:
//1:声明委托
public delegate string SomeDelegateType(int value);
SomeDelegateType del = (value) =>value.ToString();
Console.WriteLine(del(100));
比较:
使用Lambda表达式可以不需要写那么多的代码,委托的实际方法不需要定义。不需要实例化变量。其实要是使用自带的委托类型还不需要定义委托;
Func<int,string> del = (value) =>value.ToString();
Console.WriteLine(del(100));
了解Lambda表达式:
任务并行库(TPL:Task Parallel Library)
TPL是开发高性能.NET应用程序的利器,是.Net程序异步编程的基石。学习它可以更好的学习async/await异步编程模式;
- 开发并行程序的关键在于找到一个合适的任务分解方案;
- 并行总要付出一定的代价,比如线程同步,线程通信,同步缓冲数据等都是需要考虑的问题。
- 需要仔细设计并行算法,并且应该在多个软硬件环境中测试。
.NET平台中的并行计算组件
多线程和串行程序的比较
思考一下,为什么会出现多线程编程,主要是合理的理由计算机CPU的资源,不让其闲下来,在有限的时间内处理更多的事情,提高资源利用率。
提升抽象层次是降低软件开发难度,提高软件开发效率的有效方法;
Parallel开发并行计算程序
Paraller内置三种典型的代码执行法式
- Parallel.Invoke();并行执行方式;
- Parallel.For();并行循环;
- Parallel.ForEach();并行迭代;
这个Parallel是依赖于底层的Task类完成工作的。Task类的一个实例,代表一个可以被执行的工作任务,是“任务并行库”中的和兴类型;
基于TPL开发并行计算程序,几乎所有的工作都围绕着Task而展开
背景线程
- 主线程结束之后背景线程才结束;
- 异步调用是由线程迟中的线程负责执行的;
- await语句不会阻塞调用者线程;
- 同一个方法中的代码,以await为边界,被划分为两块(或者多块,取决于await语句有多少个),然后,会由线程池中的某个线程来负责执行它们。
- async/await 实际上是一种语法糖,它的功能完全可以由TPL实现,也可以直接使用线程实现,使用async/await的好处是可以写出简洁的代码;
async/await适合的场景
多线程的桌面应用程序;
服务端的I/O密集操作;
并行计算任务的创建与启动
1:可以直接通过new关键字创建一个Task对象,Task的构造函数接收一个Action类型的委托,用于封装需要并行执行的功能代码;
任务对象创建完毕之后,调用它的Start()方法启动,此任务将被追加到线程池的任务列表中调度执行。
t.Start();
2:可以把Task对象的创建和运行结合在一起;
Task t=Task.Factory.StartNew(
() =>{ 任务方法});
Task s = Task.Run(()=>{});
返回一个”用于延迟”的任务
Task.Delay()方法返回一个Task对象,它主要用在有await/async的异步方法中,其特点是不会阻塞调用者线程;实际开发中这样使用这个
await Task.Delay(5000);
demo
private static void UseTask()
{
Console.WriteLine("使用Task.Delay()方法拖慢程序运行速度");
//通过委托来实例化函数,来操作异步;
Task.Run(() =>
{
for (int i = 1; i <=10; i++)
{
Console.WriteLine("{0}",i);
Task.Delay(500).Wait(); //线程等待
}
}).Wait();
}
取回Task的运行结果
- 使用传统的多线程编程技术,利用线程同步对象取回结果;
- 使用Task<T>.Result,以阻塞等待方式取回结果;
- 使用Task.ContinueWith()方法,以回调方式取回结果;
在线课程笔记—.NET基础的更多相关文章
- 在线课程笔记—.NET基础
关于学习北京理工大学金旭亮老师在线课程的笔记. 介绍: 在线课程网址:http://mooc.study.163.com/university/BIT#/c 老师个人网站:http://jinxuli ...
- 《Selenium+Pytest Web自动化实战》随到随学在线课程,零基础也能学!
课程介绍 课程主题:<Selenium+Pytest Web自动化实战> 适合人群: 1.功能测试转型自动化测试 2.web自动化零基础的小白 3.对python 和 selenium 有 ...
- web安全入门课程笔记——网站基础与信息搜集
2-1 网站的基本概念 URL统一资源定位符 这是一个动态页面 ?ID 查询条件 后台数据库最有可能:ACCESS Web容器(web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而 ...
- Deeplearning.ai课程笔记--汇总
从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...
- Linux内核分析课程笔记(一)
linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...
- Andrew Ng机器学习课程笔记(五)之应用机器学习的建议
Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...
- Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...
- Andrew 机器学习课程笔记
Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...
- selenium课程笔记
selenium课程笔记第一天(2017-7-1) 一.配置火狐浏览器 运行:firefox.exe -p -no -remote selenium课程笔记第二天 用Eclipse+java+sele ...
随机推荐
- nowcoder(牛客网)提高组模拟赛第四场 解题报告
T1 动态点分治 就是模拟..... 但是没有过!! 看了题解之后发现.... 坑点:有可能 \(x<=r\),但是
- “全栈2019”Java第五十六章:多态与字段详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- JAVA 集合随笔
JAVA中提供了现成操纵数据的集合,使得我们在开发中基本不用自己动手实现复杂的数据结构,来保存和操纵数据. 所以当我们有了基本的数据结构知识,会合理利用JAVA提供的集合就好啦. JDK1.8;(仅列 ...
- 2016级算法第二次上机-G.ModricWang's Real QuickSort
873 思路 这是一道非常基础的题,目的是帮助大家回顾快排相关的知识.大家完成此题之后应该就对快排有比较深刻的印象了. 对于整个快排的流程,题目描述中已经给了清晰完整的伪代码.需要自己加工的部分就是, ...
- ElasticSearch 常用设置
2.2.0的启动和6.几 启动路径.端口一样,但是进入Head的路径不一样 http://localhost:9200/ 进入Head的方式2.2 的在 http://localhost:9200/_ ...
- CoreText 图文混排
基本原理 https://www.cnblogs.com/purple-sweet-pottoes/p/5109413.html CoreText(一):基本用法 https://blog.csdn ...
- vim编辑器基本操作及文件权限,sudo命令等介绍
一:vim 操作命令,在命令模式下操作 pageup 往上翻页 pagedown 往下翻页 H 移动到屏幕首行 gg 移动光标到文档的首行 前面加数字n表示移动到n行内容 G 移动到文档最后一行/查找 ...
- 【算法笔记】B1050 螺旋矩阵
1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 ...
- BZOJ - 2741 分块维护最大连续异或和
题意:给定\(a[l...r]\),多次询问区间\([l,r]\)中的最大连续异或和\(a_i⊕a_{i+1}⊕...⊕a_{j},l≤i≤j≤r\) 一眼过去认为是不可做的,但题目给出\(n=1.2 ...
- 【Python】子域名查询脚本
脚本学习,多写写就会啦,来一发个人编写的超级无敌low的子域名查询脚本 #coding:utf-8 import re import requests import urllib import url ...