.net 4.0新的命名空間system.threading.tasks
1)啟動新任務的方式,
第一種是例項化的taskfactory類,把方法傳遞給startnew方法,就會立即啟動執行緒
taskfactory tf=new taskfactory();
task t1=tf.startnew(taskmethod);
task t1=task.factory.startnew(taskmethod);
第二種是使用task的建構函式,再呼叫start()方法。
task t2=new task(taskmethod);
t2.start();
2)連續的任務
通過task可以指定在完成任務後,應開始執行另乙個特定任務。
連續任務通過在任務上呼叫continutewith來定義。
在continuewith的子任務必須要帶乙個task型別的引數
static void main(string args)
static void firstjob()
static void secondjob(task t)
輸出結果:
parallel類
paralle1類使用多個任務,會自動用多個執行緒來完成這個作業。
3)用parallel.for()方法迴圈
parallel.for類似於for迴圈。迭代的順序是不能保證的
//在foro方法中,前兩個引數定義了迴圈的開頭和結束。示例從0迭代到9。第3個引數是乙個
//action委託。整數引數是迴圈的迭代次數,該引數被傳遞給action委託引用的方法。
parallelloopresult result = parallel.for(0, 10, i => ",i);
});console.writeline(result.iscompleted);
//也可以提前中斷pamlle1.foro方法。foro方法的乙個過載版本接受第3個action
//paralleloopstate型別的引數。使用這些引數定義乙個方法,就可以呼叫paralleloopstate的break
//或stop0方法,以影響迴圈的結果。
parallelloopresult result2 = parallel.for(0, 10, (int i, parallelloopstate pls) => ", i);
if (i > 15)
});在呼叫 stop 或 break 後,迴圈中的其他執行緒可能會繼續執行一段時間(這不受應用程式開發人員的控制)
4)用parallel.for(tlocal)方法迴圈
分為三個部分,第一部分(init)引數型別是func,這個例子中是func,即返回string型別的方法。這個方法用於執行迭代的每個執行緒呼叫一次
第二部分(body)例子中引數型別是func第乙個引數是迴圈迭代,第二個引數允許停止迴圈,第三個引數,接受從init部分返回的值,該迴圈體還需要乙個返回值。
第三部分(finally)本例中接受乙個字串。該方法僅對於每個執行緒呼叫一次,這是乙個執行緒推出方法。
parallel.for(0, 20, () =>
,task ", thread.currentthread.managedthreadid, task.currentid);
return "aaa";//這個值會傳遞給第二部分的str1
},(i, pls, str1) =>
str1 thread task loopstate ", i, str1, thread.currentthread.managedthreadid, task.currentid, pls.isstopped);
return string.format("i ", i);
},(str) =>//接受第二部分穿過來的值
", str);});
parallel類
paralle會自動決定啟用多少執行緒來完成指定作業。
example 1
//在parallel.for方法中,前兩個引數定義了迴圈的開頭和結束。示例從0迭代到9。第3個引數是乙個action委託。
parallel.for(0,10,i=>",i);
});console.writeline("done");
例子 1.4 semaphore ,用parallel.for方式改寫
parallel.for(0, tcklist.count, i => 's volspot and volvalue;thread ...", tcklist[i].tostring(), thread.currentthread.managedthreadid);
thread.sleep(1000);
});console.writeline("done");
countdownevent
system.threading.countdownevent 是乙個同步基元,它在收到一定次數的訊號之後,將會解除對其等待執行緒的鎖定。
使用singal減少乙個訊號
class program
cd.wait();
console.writeline("done");
console.readline();
}
}class dojob
public void domyjob()
}
第二十章 Skeletal Animation
skeletal animation 骨骼動畫 是指互相連線的變換 骨頭 組成的分層集合,以及對應的模型mesh 即骨骼的 當這些變換隨著時間變化而變化時,模型的mesh就會形成動畫效果。本章,我們將會 skeketal animation,並開發一些系統用於支援模型動畫。把乙個skeleton對映...
第二十章 限制
城城內西部某個庭院井底,滕青山正在這。趙丹塵,你想抓我,再回去練上五十年吧。喊了一嗓子後,滕青山又立即鑽進泥土中,繼續前進。泥土中,滕青山現在也不急,不過,此刻滕青山體表的 子彈型光罩 已經沒有螺旋了。通過先天真元,改變身體形狀!看來不是我想象的那樣。滕青山很清楚,先天真元光罩如果單單維持,消耗先天...
第二十章 異常和狀態管理
try中包含的 通長包含需要清理資源的 或者從異常中恢復,或者會丟擲異常的 catch包含異常恢復的 finally包含資源清理的 保證會執行的 如果內部的乙個catch沒有捕獲到異常,那麼會向外層就是呼叫方法的那一層查詢捕獲的 總是先執行內部所有的finally語句,由內而外,最後執行catch的...