Task使用小結

2022-02-20 01:03:14 字數 1848 閱讀 4973

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 = new

cancellationtokensource();

static

void

maintask()

}, cancelltokensource.token);

cancelltokensource.cancelafter(

3000

); }

當然cancellationtoken也是可以交叉使用,如下面事例**:

static cancellationtokensource c1 = new

cancellationtokensource();

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表示處理完成之後,返回所有物件例項,**如下:

public

async

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就會委...