国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#異步方法async/await的三種返回類型

這篇具有很好參考價(jià)值的文章主要介紹了C#異步方法async/await的三種返回類型。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

有群友問C#異步方法async返回值Task和void的區(qū)別?看似簡(jiǎn)單,但不容易把它們用好。在C#中的異步編程已經(jīng)成為現(xiàn)代編程的標(biāo)配,異步方法(async/await)是實(shí)現(xiàn)異步編程的一種常用方式。在異步方法中,可以使用 Task 或 void 作為返回類型,還可以使用ValueTask返回類型。本文將介紹異步方法中3個(gè)返回類型 Task 、void和ValueTask。

一、 void類型

使用 void 作為異步方法的返回類型,表示該方法將執(zhí)行異步操作,但不會(huì)返回任何結(jié)果。由于異步方法無法返回結(jié)果,因此調(diào)用該方法的代碼無法使用 await 關(guān)鍵字來異步等待其結(jié)果。相反,可以使用事件或回調(diào)函數(shù)來處理異步操作的結(jié)果。但是,使用回調(diào)函數(shù)或事件來處理異步操作的結(jié)果比使用 await 關(guān)鍵字更加繁瑣和難以維護(hù)。示例如下:

public async void DoSomethingAsync()
{
    // 異步操作
    await LongRunningOperationAsync();

    // 操作完成后觸發(fā)事件
    OnOperationCompleted();
}

使用場(chǎng)景:

從上看是比較難用的,那么我們看看它的具體使用場(chǎng)景有哪些?一般在 Windows Forms 應(yīng)用程序中,使用異步方法來處理 UI 事件的方式就是使用 void 作為返回類型。在異步方法中,可以執(zhí)行一些 IO 操作、計(jì)算等操作,并在操作完成后通過委托或事件通知 UI 線程更新 UI。普通方法不建議使用,可以直接返回Task。

二、Task類型

Task 比較常用并且推薦使用的返回類型。使用 Task 作為異步方法的返回類型,可以讓異步方法返回一個(gè)異步操作的結(jié)果。調(diào)用該方法的代碼可以使用 await 關(guān)鍵字來異步等待該結(jié)果。當(dāng)異步操作完成時(shí),Task 將包含異步操作的結(jié)果。這種方式可以更好地支持異步編程和錯(cuò)誤處理。案例如下:

//返回一個(gè) Task<int> 對(duì)象,表示該方法將返回一個(gè)異步操作的結(jié)果.
public async Task<int> CalculateAsync()
{
    // 異步計(jì)算操作
    int result = await LongRunningOperationAsync();

    // 返回異步操作的結(jié)果
    return result;
}

Task 的使用場(chǎng)景

當(dāng)異步方法需要返回一個(gè)異步操作的結(jié)果時(shí),應(yīng)該使用 Task 作為返回類型。在這種情況下,Task 可以讓調(diào)用代碼使用 await 關(guān)鍵字來等待異步操作的結(jié)果。Task 還提供了一些有用的方法和屬性,如異常處理、取消操作等,可以更好地支持異步編程和錯(cuò)誤處理。

例如,在 Web API 中,使用異步方法來處理 HTTP 請(qǐng)求的方式就是使用 Task 作為返回類型。在異步方法中,可以執(zhí)行一些 IO 操作、數(shù)據(jù)庫查詢、計(jì)算等操作,并將結(jié)果封裝到 Task 對(duì)象中返回??蛻舳丝梢允褂?await 關(guān)鍵字等待異步操作完成,并獲取操作的結(jié)果。

、ValueTask類型

ValueTask 是 .NET Core 2.1 引入的一種新的異步編程模式,用于優(yōu)化內(nèi)存分配和性能,尤其是在大量的異步操作中。ValueTask 作為一種新的異步編程模式,可以在某些情況下更加高效地處理異步操作。ValueTask 本身是一個(gè)結(jié)構(gòu)體,它可以用于打包異步操作的結(jié)果,并且可以避免 Task 對(duì)象的不必要的分配。在使用 ValueTask 時(shí),如果異步操作已經(jīng)完成,則可以直接從 ValueTask 中獲取結(jié)果,而無需等待 Task 對(duì)象的狀態(tài)。如果異步操作尚未完成,則可以通過異步等待來等待操作完成。

//使用 ValueTask<int>?作為返回類型,可以避免創(chuàng)建 Task 對(duì)象和其他不必要的開銷。
public async ValueTask<int> ComputeAsync(int x, int y)
{
    // 模擬一些耗時(shí)的計(jì)算操作
????await?Task.Delay(1000);
    // 計(jì)算結(jié)果
????var?result?=?x?+?y;
    // 返回結(jié)果
    return result;
}
//歡迎關(guān)注公眾號(hào):DOTNET開發(fā)跳槽,領(lǐng)取海量面試題。加微信號(hào)xbhpnet入群

使用場(chǎng)景

1、大量的異步操作

在高并發(fā)的情況下,使用 Task 對(duì)象可能會(huì)導(dǎo)致大量的內(nèi)存分配和垃圾回收。使用 ValueTask 可以避免不必要的內(nèi)存分配,從而提高性能和效率。

2、頻繁的異步操作

在一些需要頻繁執(zhí)行的異步操作中,使用 Task 可能會(huì)產(chǎn)生過多的垃圾,而使用 ValueTask 可以更好地管理內(nèi)存并提高性能。

3、長(zhǎng)時(shí)間運(yùn)行的異步操作

在一些長(zhǎng)時(shí)間運(yùn)行的異步操作中,使用 Task 可能會(huì)導(dǎo)致大量的內(nèi)存分配和垃圾回收,而使用 ValueTask 可以更好地管理內(nèi)存并提高性能。

結(jié)語

Task 、void和ValueTask 作為異步方法的返回類型,應(yīng)該根據(jù)實(shí)際需求和編程方式來選擇合適的類型,大家可以參考文中他們各自的使用場(chǎng)景。希望本文對(duì)你有所收獲,你對(duì)Task 、void和ValueTask 三個(gè)返回類型有什么看法歡迎留言討論。

參考:微軟官方文檔,chatgpt文章來源地址http://www.zghlxwxcb.cn/news/detail-445408.html

來源公眾號(hào):DotNet開發(fā)跳槽

到了這里,關(guān)于C#異步方法async/await的三種返回類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity C# 之 使用 HttpWebRequest 基礎(chǔ)知識(shí)/HttpWebRequest 進(jìn)行異步Post 網(wǎng)絡(luò)訪問/數(shù)據(jù)流形式獲取數(shù)據(jù)(Task/async/await)的代碼簡(jiǎn)單實(shí)現(xiàn)

    Unity C# 之 使用 HttpWebRequest 基礎(chǔ)知識(shí)/HttpWebRequest 進(jìn)行異步Post 網(wǎng)絡(luò)訪問/數(shù)據(jù)流形式獲取數(shù)據(jù)(Task/async/await)的代碼簡(jiǎn)單實(shí)現(xiàn)

    目錄 Unity C# 之 使用 HttpWebRequest 基礎(chǔ)知識(shí)/HttpWebRequest 進(jìn)行異步Post 網(wǎng)絡(luò)訪問/數(shù)據(jù)流形式獲取數(shù)據(jù)(Task/async/await)的代碼簡(jiǎn)單實(shí)現(xiàn) 一、簡(jiǎn)單介紹 二、實(shí)現(xiàn)原理 三、注意事項(xiàng) 四、效果預(yù)覽 五、關(guān)鍵代碼 附錄 : HttpWebRequest 的一些基礎(chǔ)知識(shí) 1、HttpWebRequest 常用屬性 2、HttpWebRequest?

    2024年02月05日
    瀏覽(25)
  • promise及異步編程async await

    promise及異步編程async await

    ECMAScript 6 新增了正式的 Promise(期約)引用類型,支持優(yōu)雅地定義和組織異步邏輯。接下來幾個(gè)版本增加了使用 async 和 await 定義異步函數(shù)的機(jī)制 JavaScript 是單線程事件循環(huán)模型。異步行為是為了優(yōu)化因計(jì)算量大而時(shí)間長(zhǎng)的操作,只要你不想為等待某個(gè)異步操作而阻塞

    2024年02月04日
    瀏覽(24)
  • 【前端】淺談async/await異步傳染性

    【前端】淺談async/await異步傳染性

    \\\"異步傳染性\\\"問題通常是指,當(dāng)一個(gè)函數(shù)使用了async和await,其調(diào)用者也需要使用async和await處理異步操作,導(dǎo)致整個(gè)調(diào)用鏈都變成異步的。這種情況可能導(dǎo)致代碼變得更復(fù)雜,不易維護(hù)。 類似于C# try catch的層層上拋,在某一層catch 查了很多資料 ,對(duì)于這個(gè)問題說法還都不一樣

    2024年01月23日
    瀏覽(21)
  • HarmonyOS通過async與await同異步轉(zhuǎn)換 解決異步回調(diào)地獄

    HarmonyOS通過async與await同異步轉(zhuǎn)換 解決異步回調(diào)地獄

    我在 HarmonyOS 發(fā)送http網(wǎng)絡(luò)請(qǐng)求 中講述了 HTTP請(qǐng)求的基本方式 然后 就帶出了 回調(diào)地獄的問題 然后 上文 HarmonyOS 通過Promise 解決異步回調(diào)地獄問題 我們用Promise的解決方案 搞定了 這個(gè)問題 但是 Promise 這種寫法 可讀性其實(shí)沒有那么優(yōu)秀 沒有搞定 Promise return規(guī)則的人甚至都看不懂

    2024年01月24日
    瀏覽(26)
  • 消滅異步回調(diào),還得是 async-await

    關(guān)于異步處理問題,ES5的回調(diào)讓我們陷入回調(diào)地獄輪回,后來ES6的Promise(Promise不了解?點(diǎn)這了解[1])讓我們脫離輪回,終于,ES7的async-await帶我們走向光明。今天我們就來學(xué)習(xí)一夏 async-await,看看與Promise有何聯(lián)系和區(qū)別。 一、走進(jìn)Async-await原理 1、原理1 async函數(shù)返回一個(gè)

    2024年02月10日
    瀏覽(24)
  • 前端面試:【異步編程】Callback、Promise和Async/Await

    嗨,親愛的JavaScript探險(xiǎn)家!在JavaScript開發(fā)的旅程中,你會(huì)經(jīng)常遇到異步編程的需求。為了處理異步操作,JavaScript提供了多種機(jī)制,包括Callbacks、Promises和Async/Await。本文將深入介紹這些機(jī)制,讓你能夠更好地處理異步任務(wù)。 1. Callbacks:傳統(tǒng)的異步方式 Callbacks是JavaScript中最早

    2024年02月11日
    瀏覽(99)
  • 異步編程的概念 以及async和await的工作原理

    一、引言 二、異步編程的基本概念 三、基于任務(wù)的異步模式(TAP) 四、async和await async的工作原理: await的工作原理: 五、異步方法的編寫和調(diào)用 六、異常處理 七、取消異步操作 八、性能考慮 九、案例:異步下載文件 十、結(jié)論 在.NET中,異步編程是一

    2024年04月16日
    瀏覽(44)
  • 微信小程序——異步請(qǐng)求使用async/await實(shí)現(xiàn)同步

    微信小程序——異步請(qǐng)求使用async/await實(shí)現(xiàn)同步

    ????????在小程序的開發(fā)中,我們知道網(wǎng)絡(luò)請(qǐng)求wx.requset是一個(gè)異步請(qǐng)求的API,當(dāng)我們使用它時(shí),會(huì)出現(xiàn)請(qǐng)求還沒有結(jié)束,我們下面寫的處理數(shù)據(jù)的代碼就已經(jīng)執(zhí)行了從而導(dǎo)致了我們寫的程序出現(xiàn)問題,那么我們?cè)撛趺唇鉀Q這個(gè)問題呢?今天我們用async/await來實(shí)現(xiàn)一下吧。

    2024年02月11日
    瀏覽(26)
  • Unity 中的 async/await:優(yōu)雅處理異步任務(wù)與協(xié)程

    內(nèi)容將會(huì)持續(xù)更新,有錯(cuò)誤的地方歡迎指正,謝謝! ? Unity 中的 async/await:優(yōu)雅處理異步任務(wù)與協(xié)程Coroutine ? ? ? TechX 堅(jiān)持將創(chuàng)新的科技帶給世界! 擁有更好的學(xué)習(xí)體驗(yàn) —— 不斷努力,不斷進(jìn)步,不斷探索 TechX —— 心探索、心進(jìn)取! 助力快速掌握 async/await 異步等待 為初

    2024年02月06日
    瀏覽(32)
  • 前端異步編程全套:xmlhttprequest > ajax > promise > async/await

    同步與異步區(qū)別 同步:按順序,依次執(zhí)行,向服務(wù)器發(fā)送請(qǐng)求--客戶端做其他操作 異步:分別執(zhí)行,向服務(wù)器發(fā)送請(qǐng)求==同時(shí)執(zhí)行其他操作 原生xmlhttprequest 四步驟 創(chuàng)建ajax對(duì)象 設(shè)定數(shù)據(jù)的傳輸方式(get、post),打開連接open() 獲得響應(yīng)數(shù)據(jù) 屬性 描述 onreadystatechange 當(dāng)readysta

    2024年02月01日
    瀏覽(105)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包