zoukankan      html  css  js  c++  java
  • task.factory.startnew()

    1.委托:
    public delegate int Math(int param1,int param2);定义委托类型
    Public int Add(int param1,int param2)//定义同签名函数
    {
    Return param1+param2;
    }
    Math math;//声明委托
    math=new Math(Add);创建委托对象,与指定进行关联
    math(3,4);//调用委托函数
    2.官方为了方便 给了Func Action
    Func<int,int,int> math=delegate(int param1,int param2)
    {
    Return param1+param2;
    }
    Lambda:
    Func<int,int,int> math=(param1,param2)=>
    {
    Return param1+param2;
    }
    Action的使用如同上面Func的使用一样,没有返回值
    Public void Add(int param1,int param2)
    {
    MessageBox.show((param1+param2).ToString());
    }
    Action<int,int> math=Add;
    math(3,4);
    
    
    public static HomePageResponse HomePage(HomePageRequest request)
    {
    
    Task taskGetUnread = Task.Factory.StartNew(() => GetUnReadStatus(businesstypes, zjid, response));
    
    
    Task taskGetRecommend = Task.Factory.StartNew(() => GetRecommend(response));
    
    
    Task taskGetRunningStatus = Task.Factory.StartNew(
    () => GetRunningStatus(vehicleid, ref runningstatus, ref accumulatorstatus, ref residualoil, ref accumulatorvalue, response, ref getvaluetime));
    
    
    Task<VehicleDiagnosesData> taskDiagnose = Task.Factory.StartNew<VehicleDiagnosesData>(() => GetDiagnosesData(vehicleid, devicetype, response));
    
    
    Task<VehicleAffairsData> taskAffairs = Task.Factory.StartNew<VehicleAffairsData>(() => GetOverView(vehicleid, zjid, response));
    
    
    Task<VehicleDriveData> taskDriveData = Task.Factory.StartNew<VehicleDriveData>(
    () => GetTripAnalysis(vehicleid, devicetype, rtripid, ref platenumber, ref forrealtime, response));
    
    Task[] tasks = new Task[] { taskGetUnread, taskGetRecommend, taskGetRunningStatus, taskDiagnose, taskAffairs, taskDriveData};
    Task.WaitAll(tasks);
    
    WaitAll 是阻塞当前线程等待其它任务完毕的意思;
    WhenAll
    }
    https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.task.waitall?view=netframework-4.7.2
    1、Task用的是线程池,线程池的线程数量的有上限的,这个可以通过ThreadPool修改
    int minWorkThreadCount = processorCount * 4;
    int minIOWorkThreadCount = processorCount * 2;
    ThreadPool.SetMinThreads(minWorkThreadCount, minIOWorkThreadCount);
    2、Task.Factory.StartNew不是直接创建线程,创建的是任务,它有一个任务队列,然后通过任务调度器把任务分配到线程池中的空闲线程中,如果任务的数量比线程池中的线程多,线程池的线程数量还没有到达上限,就会创建新线程执行任务。如果线程池的线程已到达上限,没有分配到线程的任务需要等待有线程空闲的时候才执行。
    

      

  • 相关阅读:
    代码手动修改约束(AutoLayout)
    iOS开发中手机号码和价格金额有效性判断及特殊字符的限制
    Mac下如何显示隐藏文件/文件夹
    Exp8 Web综合 20181308
    20181308 邵壮 Exp7 网络欺诈防范
    20181308 邵壮 Exp6 MSF应用基础
    重现Vim任意代码执行漏洞(CVE-2019-12735) 20181308
    密码引擎-加密API研究 20181308邵壮
    密码引擎-加密API实现与测试 20181308邵壮
    Exp5 信息搜集与漏洞扫描 20181308邵壮
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/9814478.html
Copyright © 2011-2022 走看看