關於Task的認識

2022-02-14 06:50:06 字數 2868 閱讀 8907

首先來說說 task.factory.startnew這種方式來建立task,這裡的waitall()指的是等待所有task執行完成,並且裡面的task引數(t1,t2)是非同步的,先以匿名委託方式

static

void main(string

args)

);task t2 = task.factory.startnew(delegate

); task.waitall(t1, t2);

console.readkey();

console.readkey();

}private

static

void

mymethoda()

private

static

void

mymethodb()

其執行結果是 ba

再看看以傳參函式形式來看,並以拉姆達表示式來進行

因mymethoda()裡面將tas**程掛起了,所以先輸出了b,也證明了task的非同步!

使用new task建立task

、最簡單的構造task的方式為使用lambda表示式:

[csharp]view plain

copy

print

?task task = new task(() => taskmethod("task 1"));  

task.start();  

int result = task.result;  

console.writeline("result is: ", result);  

tasktask = new task(() => taskmethod("task 1"));

task.start();

int result = task.result;

console.writeline("result is: ", result);

需要注意的是,我們構造了task任務,然後start(),之後返回值即task.result屬性!由於result的關係,因此執行緒將等待result得到後再往下進行。

二、task同步執行runsynchronously

[csharp]view plain

copy

print

?task  task = createtask("task 2");  

task.runsynchronously(); //執行在主線程中,等同於直接執行: taskmethod("task 2");  

int result = task.result;  

console.writeline("result is: ", result);  

tasktask = createtask("task 2");

task.runsynchronously(); //執行在主線程中,等同於直接執行: taskmethod("task 2");

int result = task.result;

console.writeline("result is: ", result);

這裡沒有使用start()而是使用runsynchronously(),直接同步執行!等同於直接執行 result = taskmethod("task 2");

三、task的執行狀態

[csharp]view plain

copy

print

?task task = createtask("task 3");  

console.writeline(task.status);  

task.start();  

while (!task.iscompleted)  

console.writeline(task.status);  

int result = task.result;  

console.writeline("result is: ", result);  

tasktask = createtask("task 3");

console.writeline(task.status);

task.start();

while (!task.iscompleted)

console.writeline(task.status);

int result = task.result;

console.writeline("result is: ", result);

上面的**使用了狀態判斷(iscompleted)輪查方式,輸出了不同的task狀態。等到task執行完畢後,也就自然得到int結果。

關於DDD的認識

引用自http www.jdon.com jivejdon forum messagelist.shtml?thread 32093 count 15 start 30 什麼是dao,repository?在repository情況下,dao其實是多餘的,repository可以完全替代dao。以j...

關於粒度的認識

構建資料倉儲時,如何描述事實表的單個行?答案就是粒度。粒度定義意味著對各事實錶行實際代表的內容給出明確的說明,傳遞了同事實表度量值相聯絡的細節所達到的程度方面的資訊。實際應用中我們一般會這樣定義粒度,比如 顧客購物券上掃瞄裝置一次拾取的分列項內容 醫生開出的單據專案內容 銀行帳號的月快照 手機使用者...

關於指標的認識

在寫圖的鄰接矩陣轉化為圖的鄰接表儲存時,碰到了乙個問題,為每個節點建立好vnode之後,每個節點的arcnode無法正確建立。在除錯的過程中,發現程式有新建節點的操作,但是沒有與之前的鍊錶指標關聯,這個問題本質上是線性表的建立問題。尋找程式的錯誤,發現首先是新建操作的p節點沒有回到起始位置,也就是沒...