task.factory.startnew()


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不是直接創建線程,創建的是任務,它有一個任務隊列,然后通過任務調度器把任務分配到線程池中的空閑線程中,如果任務的數量比線程池中的線程多,線程池的線程數量還沒有到達上限,就會創建新線程執行任務。如果線程池的線程已到達上限,沒有分配到線程的任務需要等待有線程空閑的時候才執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM