• .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

  • 相关阅读:
    Orchard学习 02、orchard 路由
    Orchard学习 01、orchard日志
    golang限制协程的最大开启数
    go爬取博客园
    go xpath 添加头部解析
    goadmin文档
    使用GoAdmin极速搭建golang应用管理后台
    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)转
    自定义推荐央视
    python爬虫 xpath
  • 原文地址:https://www.cnblogs.com/csj007523/p/12644543.html
Copyright © 2020-2023  润新知