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

  


免責聲明!

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



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