task是.net推出資料任務處理的工作類,task的使用也被越來越多的人講解,這裡僅僅介紹task的部分使用介紹;
1、task簡單建立
--無返回值task.factory.startnew(() =>);
--返回字串型別
task.factory.startnew(() =>);
備註:task還有wait方法等待task任務的完成之後,走下面**;
2、task資料同步控制
之所以說控制,是因為task執行的時候,我們能夠通過乙個公用的引數變數來控制task任務的進行,之前我們使用的方式是全域性定義乙個bool型別的資料,通過判斷該變數值來控制程式的進行;在task中,我們可以使用cancellationtoken來控制,事例**如下:
static cancellationtokensource cancelltokensource = newcancellationtokensource();
static
void
maintask()
}, cancelltokensource.token);
cancelltokensource.cancelafter(
3000
); }
當然cancellationtoken也是可以交叉使用,如下面事例**:
static cancellationtokensource c1 = newcancellationtokensource();
static cancellationtokensource c2 = new
cancellationtokensource();
static cancellationtokensource c3 = new
cancellationtokensource();
static cancellationtokensource cancelltokensource = new
cancellationtokensource();
static
void
maintaskmuilte()
}, cancelltokensource.token);
c3.cancelafter(
3000
);//只要有乙個cancellationtoken停掉,該語句就結束
}
3、task的whenany和whenall方法介紹:
whenany表示任意乙個task完成之後,返回這個task物件,但是有時候我們需要等待任務的完成,比如競賽,只有有乙個人完成,whenany就會返回這個人內容(有點不太切合實際),whenall表示處理完成之後,返回所有物件例項,**如下:
publicasync
void
opearttask()
,c1.token),
task.factory.startnew(()=> ,c1.token),
task.factory.startnew(()=> ,c1.token),
task.factory.startnew(()=> ,c1.token)
};//var reuslt= await task.whenall(tasklist);
var reuslt = await
task.whenany(tasklist);
if(reuslt.iscompleted)
}
備註:等待的時候,要加上async 和 await;
4、task.awaitall等待所有task執行完成,該操作是同步完成;
非同步的使用 Task
新增task 引用命名空間 using system.threading.tasks console.writeline 主線程 task task new task task.start 啟動非同步 console.writeline load 執行上面 可以看到非同步是 最後才會執行 如果想放在...
C Task的使用 Task的啟動
net 4.0包含的新命名空間system.threading.tasks,它包含的類抽象出了執行緒功能。任務表示應完成的某個單元的工作。這個單元的工作可以在單獨的執行緒中執行,也可以以同步的方式啟動乙個任務,這需要等待主調執行緒。使用任務不僅可以獲得乙個抽象層,還可以對底層執行緒進行許多控制。啟動...
Task的使用注意事項
task是基於執行緒池的封裝。task進行非同步操作就是從執行緒池中獲取執行緒進行操作。threadpooltaskscheduler task的預設機制,任務在threadpool上執行 如果當前task上的taskcreationoptions設定為longrunning的話,這個task就會委...