3 回答

TA貢獻(xiàn)1735條經(jīng)驗 獲得超5個贊
不能使用ABORT/ThreadAbortedException,您應(yīng)該在定期測試“業(yè)務(wù)代碼”中支持取消事件 token.IsCancellationRequested
標(biāo)志(也避免長連接或無時間連接,例如到db,否則您將永遠(yuǎn)沒有機(jī)會測試此標(biāo)志)。出于類似的原因 Thread.Sleep(delay)
調(diào)用應(yīng)替換為 Task.Delay(delay, token)
打電話。 沒有線 Suspend
和 Resume
方法具有任務(wù)的功能。 不能重用任務(wù)實例也一樣。 但是你得到了兩個新工具: a) 延續(xù)// continuation with ContinueWhenAll - execute the delegate, when ALL// tasks[] had been finished; other option is ContinueWhenAnyTask.Factory.ContinueWhenAll( tasks, () => { int answer = tasks[0].Result + tasks[1].Result; Console.WriteLine("The answer is {0}", answer); });
b) 嵌套/子任務(wù)//StartNew - starts task immediately, parent ends whith childvar parent = Task.Factory.StartNew(() => { var child = Task.Factory.StartNew(() => { //... }); }, TaskCreationOptions.AttachedToParent);
因此,系統(tǒng)線程對任務(wù)是完全隱藏的,但在具體的系統(tǒng)線程中仍然執(zhí)行任務(wù)的代碼。 系統(tǒng)線程是用于任務(wù)的資源。當(dāng)然,在任務(wù)并行執(zhí)行的遮罩下仍然存在線程池。線程如何執(zhí)行新任務(wù)可能有不同的策略。另一個共享資源 任務(wù)調(diào)度器關(guān)心它。一些問題 任務(wù)調(diào)度器解決1)喜歡在同一個線程中執(zhí)行任務(wù)及其計算,以最小化切換成本。 內(nèi)聯(lián)執(zhí)行2)更喜歡按已啟動的順序執(zhí)行任務(wù)。 公平3)根據(jù)“任務(wù)活動的先驗知識”,在非活動線程之間更有效地分配任務(wù)。 偷工..重要:一般來說,“異步”與“并行”不一樣。使用TaskScheduler選項,您可以在一個線程中同步執(zhí)行異步任務(wù)。為了表示并行代碼執(zhí)行,可以使用更高的抽象(比任務(wù)): Parallel.ForEach
,PLINQ
,Dataflow
.任務(wù)與C#異步/等待特性集成 承諾模型,例如那里 requestButton.Clicked += async (o, e) => ProcessResponce(await client.RequestAsync(e.ResourceName));
執(zhí)行 client.RequestAsync
不會阻止UI線程。重要:引擎蓋下 Clicked
委托調(diào)用是絕對正常的(所有線程都由編譯器完成)。
- 3 回答
- 0 關(guān)注
- 266 瀏覽
添加回答
舉報