最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Task提高異步執(zhí)行效率技巧

 更新時間:2022年04月11日 09:43:26   作者:一事冇誠  
這篇文章介紹了Task提高異步執(zhí)行效率的技巧,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

async Task 語法糖出來后,異步編程變得非常簡單,適合需要耗費較長時間的任務(wù)。

有些小伙伴使用后可能會非常疑惑,使用異步和同步,在耗時上幾乎沒有差別。

下面我們看一個例子,場景是需要調(diào)用多個第三方的WebApi,分別是獲取名稱、年齡、性別,由于網(wǎng)絡(luò)環(huán)境等原因,api響應(yīng)時間可能會接近1秒

public async Task Test()
{
    var sw = new Stopwatch();
    sw.Start();

    var userName = await GetUserNameAsync();
    var userAge = await GetUserAgeAsync();
    var userSex = await GetUserSexAsync();

    sw.Stop();
    var ts = sw.Elapsed;
    Console.WriteLine($"總共耗時:{ts.TotalMilliseconds}ms");
}

private async Task<string> GetUserNameAsync()
{
    await Task.Delay(500);
    return "小明";
}

private async Task<string> GetUserAgeAsync()
{
    await Task.Delay(800);
    return "11";
}

private async Task<string> GetUserSexAsync()
{
    await Task.Delay(900);
    return "11";
}

運行后發(fā)現(xiàn),這個時間2秒多,這用戶體驗肯定是無法忍受的

導(dǎo)致這樣結(jié)果的原因是每次進(jìn)行異步調(diào)用的時候,都在異步函數(shù)前加上了 await ,對于單單這個過程來說,其實相當(dāng)于同步,等待直到結(jié)果返回,每個異步函數(shù)都await,時間自然就疊加了,為了解決這個問題,使用一個小技巧,可以將代碼改成下面這樣

public async Task Test()
{
    var sw = new Stopwatch();
    sw.Start();

    var userNameTask =  GetUserNameAsync();
    var userAgeTask =  GetUserAgeAsync();
    var userSexTask =  GetUserSexAsync();

    var userName = await userNameTask;
    var userAge = await userAgeTask;
    var userSex = await userSexTask;

    sw.Stop();
    var ts = sw.Elapsed;
    Console.WriteLine($"總共耗時:{ts.TotalMilliseconds}ms");
}

private async Task<string> GetUserNameAsync()
{
    await Task.Delay(500);
    return "小明";
}

private async Task<string> GetUserAgeAsync()
{
    await Task.Delay(800);
    return "11";
}

private async Task<string> GetUserSexAsync()
{
    await Task.Delay(900);
    return "11";
}

這次運行的總耗時,就是3個異步中,耗時最長那個GetUserSexAsync

為什么會這樣呢,這個小技巧的關(guān)鍵是這里,當(dāng)執(zhí)行到異步函數(shù)的時候,不加 await,不進(jìn)行等待,讓這些任務(wù)乖乖在別的線程的執(zhí)行,當(dāng)需要用到他們的時候,再去等待返回值,所以時間上不會進(jìn)行疊加,哪個最長,總耗時就是哪個

var userNameTask =  GetUserNameAsync();
var userAgeTask =  GetUserAgeAsync();
var userSexTask =  GetUserSexAsync();

var userName = await userNameTask;
var userAge = await userAgeTask;
var userSex = await userSexTask;

到此這篇關(guān)于Task提高異步執(zhí)行效率技巧的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#中的Image控件用法詳解與實際應(yīng)用示例

    C#中的Image控件用法詳解與實際應(yīng)用示例

    在C#應(yīng)用程序開發(fā)中,圖像顯示是一個常見的需求,無論是創(chuàng)建圖形界面還是處理圖像數(shù)據(jù),System.Windows.Controls.Image控件都是實現(xiàn)這一目標(biāo)的重要工具,本文將詳細(xì)介紹Image控件的功能、用法、優(yōu)化技巧以及一些實際應(yīng)用示例,需要的朋友可以參考下
    2024-06-06
  • C#中LINQ多條件JOIN時為什么可以使用匿名類

    C#中LINQ多條件JOIN時為什么可以使用匿名類

    這篇文章主要給大家介紹了關(guān)于C#中LINQ多條件JOIN時為什么可以使用匿名類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2018-09-09
  • C#中字符串優(yōu)化String.Intern、IsInterned詳解

    C#中字符串優(yōu)化String.Intern、IsInterned詳解

    這篇文章主要給大家介紹了關(guān)于C#中字符串優(yōu)化String.Intern、IsInterned的相關(guān)資料,文中通過示例代碼介紹的,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-12-12
  • Js中的substring,substr與C#中的Substring比較

    Js中的substring,substr與C#中的Substring比較

    本篇文章主要是對Js中的substring,substr與C#中的Substring進(jìn)行了比較。需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#中父窗口和子窗口之間控件互操作實例

    C#中父窗口和子窗口之間控件互操作實例

    這篇文章主要介紹了C#中父窗口和子窗口之間控件互操作的方法,實例分析了父窗口與子窗口互操作的技巧,需要的朋友可以參考下
    2015-01-01
  • C# FileStream復(fù)制大文件

    C# FileStream復(fù)制大文件

    這篇文章主要為大家詳細(xì)介紹了C# FileStream復(fù)制大文件的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C#創(chuàng)建自定義控件的示例

    C#創(chuàng)建自定義控件的示例

    這篇文章主要介紹了C#創(chuàng)建自定義控件的示例,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • C# 枚舉Color并展示各種顏色效果的示例

    C# 枚舉Color并展示各種顏色效果的示例

    本文主要介紹了C# 枚舉Color并展示各種顏色效果,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C#語法相比其它語言比較獨特的地方(二)

    C#語法相比其它語言比較獨特的地方(二)

    這篇文章主要介紹了C#語法相比其它語言比較獨特的地方(二),本文講解了internal與protected、private、enum、string的==、傳引用等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#之HttpClient設(shè)置cookies的兩種方式

    C#之HttpClient設(shè)置cookies的兩種方式

    這篇文章主要介紹了C#之HttpClient設(shè)置cookies的兩種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論

淳安县| 陆川县| 天祝| 铜川市| 吴桥县| 康平县| 浙江省| 彩票| 庆阳市| 明光市| 白朗县| 杂多县| 泸西县| 绵阳市| 贵溪市| 鄂托克旗| 奉化市| 康平县| 耿马| 昌江| 灵川县| 民勤县| 延长县| 钟祥市| 阜阳市| 花莲县| 德庆县| 宁城县| 洪雅县| 昌黎县| 平舆县| 比如县| 洮南市| 株洲县| 白沙| 合肥市| 西安市| 禄劝| 安图县| 万年县| 民丰县|