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:
1、Task用的是線程池,線程池的線程數量的有上限的,這個可以通過ThreadPool修改
int
minWorkThreadCount = processorCount * 4;
int
minIOWorkThreadCount = processorCount * 2;
ThreadPool.SetMinThreads(minWorkThreadCount, minIOWorkThreadCount);
2、Task.Factory.StartNew不是直接創建線程,創建的是任務,它有一個任務隊列,然后通過任務調度器把任務分配到線程池中的空閑線程中,如果任務的數量比線程池中的線程多,線程池的線程數量還沒有到達上限,就會創建新線程執行任務。如果線程池的線程已到達上限,沒有分配到線程的任務需要等待有線程空閑的時候才執行。