.net 多线程发展1.0--4.0


1. .netframeworkd 1.0 Thread 线程受计算机CPU控制,同时创建多个容易死机
ThreadStart st=()=>
Thread thread=new Thread(
线程受计算机CPU控制,同时创建多个容易死机

2. .netframeworkd 2.0,ThreadPool线程池管理线程,避免重复申请和释放,但是在线程顺序控制方面不好用
WaitWork callback=o =>
{
}
ThreadPool.QueueUserWorkItme(callback);

3。 .netframeworkd 3.0 task 被称为线程最佳实践,API多
Task task=new Task(action);
task.start()

Parallel.Invoke() //Parallel可以起动多线程,主线程也参与计算;


Task 多线程:线程不要套线程
Task.Run(()=>this.Coding("str","dd"));
Task.Run(()=>this.Coding("str2","dd2"));
Task.Run(()=>this.Coding("str3","dd3"));
Task.WaitAll(taskList.Toa)
Task.WaitAny(taskList.Toa)

TaskFactory task=new TaskFractory();
task.ContinueWhenAll()//continue

线程安全:

list<int> list=new list<int>();
for(int i=0;i<10000;i++)
{
Task.Run(()=>
{
lock(LOCK)
{
list.add(i);
}
});
}
private static readonly object Lock=new object();


4. await async
await Task.Run()


不同步编码的形式去写异步
ILSpy 反编译器:
屏幕录像专家v2016专家v2016

IOC:依赖倒置原则,应依赖抽象:接口,抽象类


AOP:不破坏封装的前提下去扩展功能
验证登录
异常处理
业务逻辑
日志处理
缓存处理


public async Task<IActionResult> GetData()
{
var Result1 = await aaaDal.GetModelById(id);
if(Result1.error==0 && Result1.data!=null)
{
//dosomething by Result1
}
var Result2 = await bbbDal.GetModelById(id);
if(Result2.error==0 && Result2.data!=null)
{
//dosomething by Result2
}
var Result3 = await cccDal.GetModelById(id);
if(Result3.error==0 && Result3.data!=null)
{
//dosomething by Result3
}
}


async,await多线程里,不需要管理这些子线程 (Result1,Result2,Result3) 系统会自动释放

 

 

进程,线程,同步,异步
委托
thread await async

计算机:
进程:一个应用程序一个进程,占据的计算机资源集合
线程:程序执行的最小单元,属于进程
多线程:一个进程里面有多个线程并发执行

C#:
thread 是一个类,通过操作系统请求执行
currentthread
managedthreadid

异步多线程:主线程忙于计算,不能响应其他执行
发起调用,不等待结束就直接执行下一行
动作由新子线程来完成
多线程应用场景:发邮件,写日志,发短信
:启动无序,结束无序
执行时间不确定
需协调管理线程成本
action.BeginInvoke()

IactionResult i= action.BeginInvoke(”上传文件“,null,null )
i.IsCompleted //等待线程执行完为true
i.asyncWaitHandle.WaitOne()//阻塞当前线程,直到收到结果
i.asyncWaitHandle.WaitOne(1000)//最多等待当前线程1秒

 

sync await异步3种方式:
async 声明函数,await 返回值,一起用才会有效果
public async void GetData(){
string result= await new HttpCLIENT("https://www.youtube.com");
}

public async task GetData(){
string result= await new HttpCLIENT("https://www.youtube.com");

}

public async task<string> GetData(){
string result= await new HttpCLIENT("https://www.youtube.com");
return result;
}

async void Getdata()
async task Getdata2()
async task<string> Getdata3()

进程,线程,同步,异步
委托
thread await async

 

posted @ 2020-04-06 20:50  大树2  阅读(216)  评论(0编辑  收藏  举报