女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

.NET開發(fā)者必看:JetBrains Rider Tasks(任務(wù))視圖功能解析與演示教程

龍智DevSecOps ? 2025-02-27 17:22 ? 次閱讀

進(jìn)一步了解Rider或申請免費(fèi)試用,歡迎咨詢JetBrains授權(quán)合作伙伴-龍智

wKgZPGfALSiAdxcuAAHmKfkr9yY914.png

任務(wù)并行庫 (TPL) 是所有 .NET 應(yīng)用程序的基礎(chǔ),允許框架編寫和執(zhí)行多線程和并行代碼。此外,想要充分利用資源的開發(fā)者可能會借助 System.Threading 和 System.Threading.Tasks 中的類型編寫自定義代碼。只有掌握并發(fā)和線程的基礎(chǔ),包括鎖定、死鎖、await 和計(jì)劃,才能編寫出快速且可擴(kuò)縮的解決方案。要擴(kuò)展對這些概念的理解,部分需要優(yōu)秀的工具來協(xié)助呈現(xiàn)和分析任務(wù)執(zhí)行的繁雜本質(zhì)。此前,JetBrains推出了 Tasks(任務(wù))視圖的第一次迭代,這個(gè)強(qiáng)大工具旨在幫助您了解當(dāng)前應(yīng)用程序流程中的既有任務(wù)。本文將探究新的工具窗口,探討其基本 UI 元素,并演示一些常見場景。最后,您將有能力探索自己的代碼庫并發(fā)現(xiàn)優(yōu)化機(jī)會。

.NET 應(yīng)用程序中的任務(wù)執(zhí)行

在 .NET 中,Tasks(任務(wù))提供了對并發(fā)和多線程等概念的抽象。其中的想法是減少對 CPU 核心和線程的顧慮,并處理并發(fā)計(jì)劃和執(zhí)行工作的高級概念。這通常很棒,因?yàn)樗梢詭椭_發(fā)者編寫更多命令式代碼,同時(shí)有效利用所有系統(tǒng)資源。雖然抽象相當(dāng)不錯,但沒有一種抽象是完美的,而且有些時(shí)候,您必須同時(shí)處理多個(gè)任務(wù)的麻煩。其中包括死鎖、競爭條件和導(dǎo)致背壓的低效計(jì)劃。處理抽象并不意味著您不應(yīng)該理解它們的運(yùn)作方式和原因。通常,您負(fù)責(zé)計(jì)劃任務(wù),但不知道這些任務(wù)何時(shí)以及如何完成。執(zhí)行是 .NET 運(yùn)行時(shí)的工作。雖然您可能會看到預(yù)示問題即將發(fā)生的特定代碼模式,但診斷 Tasks(任務(wù))問題的最佳方式是在運(yùn)行時(shí)。下文將展示代碼庫中的一些常見場景,以及 Tasks(任務(wù))視圖如何幫助您更好地理解您的應(yīng)用程序。

常用任務(wù)

處理任務(wù)時(shí),最可能出現(xiàn)的情況是使用的 API 會返回需要 async 和 await 關(guān)鍵字的任務(wù)。這些異步 API 位于 ASP.NET Core、MAUI 和 Entity Framework Core 中。許多開源項(xiàng)目也已轉(zhuǎn)向異步優(yōu)先 API 來支持開發(fā)者需求。我們來看一個(gè)簡單的示例。

await BasicWork(); async Task BasicWork() { await Task.Delay(TimeSpan.FromSeconds(1)); Console.WriteLine(" Hello Tasks View!"); }

在這個(gè)示例中,有兩個(gè)任務(wù):源自我們程序的主要任務(wù)和 BasicWork 方法。可以使用新的 Tasks(任務(wù))視圖來確認(rèn)這一點(diǎn)。在調(diào)試會話中,點(diǎn)擊 Tasks(任務(wù))標(biāo)簽頁查看下表。

wKgZPGfALV-AFaiUAAC_LJD4w2U916.png表模式下的 JetBrains Rider 的 Tasks(任務(wù))視圖

選擇右上角的選項(xiàng)可以切換到 Graph(圖表)視圖。

wKgZO2fALXSAbRyrAADEy34yVu0836.png圖表模式下的 JetBrains Rider 的 Tasks(任務(wù))視圖

將鼠標(biāo)懸停在任意堆棧條目上即可在圖表視圖中查看行信息。

wKgZPGfALZeASiCxAAFTONWJoHo347.png在圖表視圖中顯示行

處理任務(wù)時(shí),任何任務(wù)在任何時(shí)候都會具有以下五種狀態(tài)之一:

  • Active(有效):目前正在執(zhí)行和運(yùn)行。
  • Scheduled(已計(jì)劃):任務(wù)已創(chuàng)建,但尚未執(zhí)行。
  • Awaiting(等待):任務(wù)已經(jīng)等待,但可能正在等待其他任務(wù)。
  • Blocked(阻塞):任務(wù)位于堆棧頂部,執(zhí)行線程被阻塞(睡眠、等待鎖等)。堆棧中還有一些更高級別的任務(wù)。
  • Deadlocked(死鎖):任務(wù)正在爭用資源,并且存在嚴(yán)重問題。

接下來看一看父任務(wù)。

父任務(wù)

通過父級操作,開發(fā)者可以按邏輯對任務(wù)進(jìn)行分組。在任務(wù)中創(chuàng)建任務(wù)時(shí),您可以使用 TaskCreationOptions.AttachedToParent 將新任務(wù)與包含任務(wù)綁定。

await ParentedTasks(); Task ParentedTasks() { // Parent task var parentTask = Task.Factory.StartNew(() => { Console.WriteLine("Parent task started."); // Child task var task = Task.Factory.StartNew(() => { Console.WriteLine("Child task started."); Task.Delay(2000).Wait(); // Simulating some work Console.WriteLine("Child task completed."); }, TaskCreationOptions.AttachedToParent); Console.WriteLine("Parent task doing some work."); }, TaskCreationOptions.AttachedToParent); // Wait for parent task to complete, which includes the children parentTask.Wait(); Console.WriteLine("Parent task completed."); return Task.CompletedTask; }

運(yùn)行代碼并查看 Tasks(任務(wù))視圖,您可以看到我們已經(jīng)成功為子任務(wù)設(shè)置父任務(wù)。

wKgZO2fALb6AHKeYAAC9OMjh0bI882.png顯示作為父任務(wù)綁定到另一個(gè)任務(wù)的任務(wù)

請注意,每個(gè)新任務(wù)都有一個(gè)由 .NET 運(yùn)行時(shí)指定的整數(shù) Id。這些標(biāo)識符有助于跟蹤當(dāng)前流程中存在的任務(wù)。這次,圖表視圖顯示由 ParentedTasks 代碼產(chǎn)生的兩個(gè)異步邏輯堆棧,該代碼使用類似于 Wait 的方法并返回 Task.CompletedTask。

wKgZPGfALc-AJNODAAEc6onOIQk476.png顯示兩個(gè)異步邏輯堆棧

很好, 了解任務(wù)是相關(guān)還是已創(chuàng)建單獨(dú)邏輯堆棧,可以幫助您了解是否創(chuàng)建了潛在的競爭條件。接下來看看 Tasks(任務(wù))視圖如何幫助了解工作的計(jì)劃方式。

計(jì)劃任務(wù)

await 一項(xiàng)任務(wù)時(shí),您可以有效地將工作安排在未來的時(shí)間。這項(xiàng)工作可以在計(jì)劃任務(wù)之后立即進(jìn)行,也可以在執(zhí)行其他計(jì)劃任務(wù)之后進(jìn)行。在下面的示例中,我們計(jì)劃了幾個(gè)任務(wù)并等待它們完成。

await ScheduledWork();async Task ScheduledWork() { Console.Write("Let's work..."); var tasks = Enumerable .Range(1, 10) .Select((i) => Task.Run(() => Console.Write(i))); await Task.WhenAll(tasks); }

通過 Task.WhenAll 嘗試執(zhí)行所有提供的任務(wù),所有任務(wù)都計(jì)劃在未來執(zhí)行。您可以在 Tasks(任務(wù))視圖中看到此信息。

wKgZO2fALfCAf2pmAAKf0Lx-oC0447.png已創(chuàng)建的 10 個(gè)任務(wù)的計(jì)劃任務(wù)

此外,使用 Task.WhenAll 會創(chuàng)建異步邏輯堆棧,所有操作都可以在該堆棧下運(yùn)行。

wKgZO2fALgiAX0HuAADODiwKDe8667.png兩個(gè)異步邏輯堆棧,其中一個(gè)顯示 10 個(gè)值

在調(diào)試會話期間逐步執(zhí)行代碼時(shí),您將看到 Tasks(任務(wù))列表隨著任務(wù)完成而縮減。您可能還會注意到多個(gè)任務(wù)在同時(shí)執(zhí)行。

wKgZPGfALhuABN6BAANU3B3E0xo638.pngTasks(任務(wù))視圖中的任務(wù)逐漸減少

看著任務(wù)完成當(dāng)然感覺棒極了,但這個(gè)過程也不應(yīng)該沒完沒了。接下來,是處理任務(wù)時(shí)最可怕的情況:死鎖。

死鎖

死鎖最常見的原因是對某種鎖定機(jī)制保護(hù)的共享資源的爭用。鎖定在處理共享資源時(shí)必不可少,但可能導(dǎo)致應(yīng)用中斷問題。

創(chuàng)造一個(gè)死鎖, 一起來了解 Tasks(任務(wù))視圖如何幫助我們識別它。我們將計(jì)劃兩個(gè)任務(wù),每個(gè)任務(wù)都嘗試鎖定相同的變量。

await Deadlock(); // This method will cause a deadlock // proceed with caution, oOOoOOoOo! async Task Deadlock() { object one = new(); object two = new(); var timer = new System.Timers.Timer( TimeSpan.FromSeconds(2) ) { Enabled = true, AutoReset = false }; timer.Elapsed += (_, _) => { // only see this if we're deadlocked Console.WriteLine("Deadlock"); }; await Task.WhenAll(Task.Run(() => { Console.WriteLine("Getting lock for one."); lock (one) { Thread.Sleep(1000); Console.WriteLine("Getting lock two in first task."); lock (two) { } } }), Task.Run(() => { Console.WriteLine("Getting lock two in second task."); lock (two) { Thread.Sleep(1000); Console.WriteLine("Getting lock one in second task."); lock (one) { } } })); }

運(yùn)行代碼時(shí),您會發(fā)現(xiàn)應(yīng)用程序不會退出。在 Run(運(yùn)行)工具欄中,點(diǎn)擊暫停按鈕來暫停應(yīng)用程序。糟了,死鎖!太震驚了!(其實(shí)也沒有很震驚)。

wKgZO2fALkCAGLe1AAFUAAyU1z8899.png任務(wù)表格視圖中的一對死鎖任務(wù)

圖表視圖更能說明問題,它展示了兩個(gè)競爭的任務(wù)及其原因。

wKgZO2fALk-ACjDJAAGOL7kvt38061.png任務(wù)圖表視圖中的一對死鎖任務(wù)

雙擊任意一個(gè)死鎖的邏輯堆棧都會將您帶到死鎖的位置。

wKgZO2fALl6AJERoAAPsWRtJtvo925.png顯示導(dǎo)致 JetBrains Rider 死鎖的代碼

這種便捷的導(dǎo)航應(yīng)該可以讓查找和解決死鎖變得非常簡單。

結(jié)論

Tasks(任務(wù))視圖目前在 JetBrains Rider 2024.2 EAP 中可用,期待您的反饋。任務(wù)可能是 .NET 開發(fā)的挑戰(zhàn)性部分,希望額外的工具可以幫助您克服這些挑戰(zhàn)。嘗試一下,看看它是否可以幫助您優(yōu)化現(xiàn)有代碼或找到代碼庫中存在已久的問題。

本博文英文原作者:Khalid Abuhakmeh

關(guān)于 JetBrains Rider

JetBrains Rider 可以幫助您在 Windows、Mac 和 Linux 上開發(fā)完整的 .NET 應(yīng)用程序和 Web 項(xiàng)目,以及 Unity、Unreal Engine 和基于 Godot 的游戲。它為 .NET 開發(fā)中使用的所有主要語言提供了優(yōu)異的編輯支持和代碼洞察,這些語言包括 C#、F#、Razor、Blazor 語法、JavaScript、TypeScript、XAML、HTML、CSS 和 SQL。JetBrains Rider 將 ReSharper 豐富的代碼檢查、上下文操作和重構(gòu)與 IntelliJ 平臺強(qiáng)大的 IDE 功能集和 Rider 自身的 .NET 特色融合在一起。盡管功能非常豐富,但 IDE 在不同平臺上仍然能夠快速運(yùn)行和響應(yīng)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • .NET
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    24282
  • jetbrains技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    111
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    機(jī)智云開發(fā)者大會視頻分享,帶你近距離解析物聯(lián)網(wǎng)

    機(jī)智云開發(fā)者大會視頻分享,帶你近距離解析物聯(lián)網(wǎng) 機(jī)智云開發(fā)者大會(深圳站)視頻分享:01 機(jī)智云4.0 分享嘉賓:機(jī)智云CEO Jack觀看此視頻后,你會發(fā)現(xiàn):機(jī)智云4.0 是如何整合物聯(lián)網(wǎng)、大數(shù)
    發(fā)表于 11-02 16:42

    絕對干貨!HarmonyOS開發(fā)者日資料全公開,鴻蒙開發(fā)者都在看

    731HarmonyOS開發(fā)者日大會PPT資料全在這了,想要了解的小伙伴可以自行下載啦~下載資料的小伙伴還可以在評論區(qū)回復(fù)領(lǐng)取5個(gè)積分哦1、HarmonyOS 職業(yè)認(rèn)證解讀:該主題是開發(fā)者非常關(guān)注
    發(fā)表于 08-04 14:36

    喜報(bào)|HarmonyOS開發(fā)者社區(qū)連獲業(yè)內(nèi)獎項(xiàng),持續(xù)深耕開發(fā)者生態(tài)

    ,邀請各應(yīng)用專家進(jìn)行面對面交流,針對HarmonyOS輸出技術(shù)解析,版本更新等高質(zhì)量內(nèi)容進(jìn)行分享,以領(lǐng)先技術(shù)回饋社區(qū),幫助開發(fā)者學(xué)習(xí)和了解相關(guān)技術(shù)。2023年,HarmonyOS開發(fā)者社區(qū)將繼續(xù)加強(qiáng)生態(tài)建設(shè),服務(wù)廣大
    發(fā)表于 01-19 14:32

    Microchip MPLAB X IDE 任務(wù)列表功能

    本視頻介紹演示了利用MPLAB X IDE的“任務(wù)列表(Tasks List)功能”,使用特殊字樣作為注釋的開頭,將注釋在MPLAB X IDE的
    的頭像 發(fā)表于 06-06 03:45 ?2439次閱讀
    Microchip MPLAB X IDE <b class='flag-5'>任務(wù)</b>列表<b class='flag-5'>功能</b>

    龍芯.NET正式發(fā)布 開源共享與開發(fā)者共成長

    2020年12月19日,2020中國。 NET開發(fā)者大會于蘇州盛大開幕。本次大會以“開源、共享、創(chuàng)新”為主題,以線下城市蘇州為中心,覆蓋北京、上海、深圳、廣州、長沙、成都、廈門、膠東等地區(qū),是中國
    的頭像 發(fā)表于 12-22 16:55 ?2735次閱讀

    華為開發(fā)者大會主要內(nèi)容 華為開發(fā)者大會2021年必看

    華為開發(fā)者大會主要內(nèi)容 華為開發(fā)者大會2021年必看 今天正在直播的華為開發(fā)者大會2021年你必須認(rèn)真看看;內(nèi)容十分精彩,比如圖庫應(yīng)用數(shù)據(jù)加載顯示模型;HarmonyOS Connec
    的頭像 發(fā)表于 10-23 11:23 ?2059次閱讀
    華為<b class='flag-5'>開發(fā)者</b>大會主要內(nèi)容 華為<b class='flag-5'>開發(fā)者</b>大會2021年<b class='flag-5'>必看</b>

    2021年華為開發(fā)者大會亮點(diǎn)紛呈 OpenHarmony、智能硬件、HarmonyOS架構(gòu)解析

    2021年華為開發(fā)者大會亮點(diǎn)紛呈 OpenHarmony、智能硬件、HarmonyOS架構(gòu)解析 今年的華為開發(fā)者大會2021(Together)在東莞松山湖舉辦,HarmonyOS 3開發(fā)者
    的頭像 發(fā)表于 10-23 20:48 ?4889次閱讀
    2021年華為<b class='flag-5'>開發(fā)者</b>大會亮點(diǎn)紛呈 OpenHarmony、智能硬件、HarmonyOS架構(gòu)<b class='flag-5'>解析</b>

    openEuler Summit開發(fā)者峰會:中國移動基于eggo集群快速部署功能演示

    openEuler Summit開發(fā)者峰會:中國移動基于eggo集群快速部署功能演示
    的頭像 發(fā)表于 11-10 10:39 ?1711次閱讀
    openEuler Summit<b class='flag-5'>開發(fā)者</b>峰會:中國移動基于eggo集群快速部署<b class='flag-5'>功能演示</b>

    供鴻蒙開發(fā)者使用的計(jì)數(shù)動畫文本視圖

    該三方開源庫從github fork過來,主要將底層接口調(diào)用的實(shí)現(xiàn)修改成鴻蒙接口的實(shí)現(xiàn),將三方庫鴻蒙化,供開發(fā)鴻蒙應(yīng)用的開發(fā)者使用。 計(jì)數(shù)動畫文本視圖一個(gè)很小的庫使對Text的動畫計(jì)數(shù)變得非常容易。 項(xiàng)目移植狀態(tài):支持組件所有基
    發(fā)表于 04-02 14:26 ?1次下載

    無距離編程,使用JetBrains Rider進(jìn)行遠(yuǎn)程開發(fā)

    另一個(gè)必要條件是遠(yuǎn)程服務(wù)器啟用了 SSH。JetBrains 建議,遠(yuǎn)程服務(wù)器的最低配置為 2 核、4GB RAM 和 5GB 磁盤,但這完全取決于解決方案和開發(fā)工作流。目前,遠(yuǎn)程服務(wù)器必須是 Linux 的,但 Mac 和 Windows 支持也在計(jì)劃之中。
    的頭像 發(fā)表于 06-19 14:41 ?1682次閱讀

    JetBrains IDE中AI Assistant功能示例

    JetBrains 宣布所有基于 IntelliJ 的 IDE 和 .NET 工具將會集成新功能:AI 助手 (AI Assistant),并表示會將它整合到 IDE 的核心工作流中,尤其是
    的頭像 發(fā)表于 07-03 14:22 ?1676次閱讀
    <b class='flag-5'>JetBrains</b> IDE中AI Assistant<b class='flag-5'>功能</b>示例

    Google Calendar、Tasks和Keep應(yīng)用將整合Gemini模型

    在今日舉行的I/O 2024開發(fā)者大會上,谷歌公司帶來了一項(xiàng)令人興奮的新功能:在Google Calendar、Tasks和Keep應(yīng)用中整合了Gemini模型,為用戶帶來前所未有的AI體驗(yàn)。這一創(chuàng)新舉措將極大地豐富用戶在日程管
    的頭像 發(fā)表于 05-15 11:24 ?812次閱讀

    JetBrains IDE上架開發(fā)微信小程序的官方插件

    一直以來,小程序開發(fā)者必須安裝第三方插件,才能在 JetBrains IDE 中進(jìn)行小程序開發(fā)。在 JetBrains Marketplace 上,有關(guān)插件已有約 50 萬下載量。 對
    的頭像 發(fā)表于 01-16 17:15 ?549次閱讀
    <b class='flag-5'>JetBrains</b> IDE上架<b class='flag-5'>開發(fā)</b>微信小程序的官方插件

    【Android開發(fā)者必看】使用JetBrains TeamCity為Android項(xiàng)目構(gòu)建CI/CD管道詳細(xì)指南

    【CI/CD】定義明確的構(gòu)建、測試和部署工作流對Android應(yīng)用的開發(fā)至關(guān)重要。JetBrains TeamCity是一個(gè)用于構(gòu)建可靠管道的CI/CD平臺,可與流行的Android開發(fā)工具無縫集成,具有人性化的界面來配置構(gòu)建和
    的頭像 發(fā)表于 03-21 15:42 ?453次閱讀
    【Android<b class='flag-5'>開發(fā)者</b><b class='flag-5'>必看</b>】使用<b class='flag-5'>JetBrains</b> TeamCity為Android項(xiàng)目構(gòu)建CI/CD管道詳細(xì)指南

    實(shí)戰(zhàn)教程:使用JetBrians Rider快速部署與調(diào)試PS5和Xbox上的UE項(xiàng)目

    面向主機(jī)游戲開發(fā)者的大新聞!JetBrains Rider 2024.3版本增加了對PlayStation?5和Xbox 游戲主機(jī)的支持(即將支持 Nintendo Switch),您可以直接在您喜歡的游戲主機(jī)上構(gòu)建、部署和調(diào)試
    的頭像 發(fā)表于 04-11 14:31 ?243次閱讀
    實(shí)戰(zhàn)教程:使用JetBrians <b class='flag-5'>Rider</b>快速部署與調(diào)試PS5和Xbox上的UE項(xiàng)目