第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么Thread和Task的邏輯結(jié)束時(shí)間相等?

為什么Thread和Task的邏輯結(jié)束時(shí)間相等?

C#
慕村225694 2023-08-13 14:07:15
我想知道線程和任務(wù)之間的區(qū)別。除了簡(jiǎn)單的邏輯之外,還打印了兩個(gè)線程和兩個(gè)任務(wù)的結(jié)束時(shí)間。兩個(gè)任務(wù)的結(jié)束時(shí)間相同。我有一個(gè)代碼。當(dāng)兩個(gè)線程執(zhí)行時(shí),兩個(gè)任務(wù)的結(jié)束時(shí)間相同。因?yàn)槿蝿?wù)執(zhí)行異步并行,所以我認(rèn)為任務(wù)的結(jié)束時(shí)間將是線程的一半。我的想法有什么錯(cuò)誤?class Program{    static ConcurrentBag<string> cb = new ConcurrentBag<string>();    static System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();    static void Main(string[] args)    {        sw.Start();        // no.1 Thread          Thread1();        Thread2();        // no.2 Task        //Task1();        //Task2();        while (true)        {            if (cb.Count == 1000000)            {                sw.Stop();                Console.WriteLine($"{cb.First()} Completed -> Time : {sw.ElapsedMilliseconds}");                break;            }        }        Console.ReadKey(true);    }    static void CommonCode(string msg)    {        for (int i = 0; i < 500000; i++)            cb.Add(msg);    }    static void Thread1()    {        Thread t = new Thread(() => {            CommonCode("Thread");        });        t.Start();    }    static void Thread2()    {        Thread t = new Thread(() => {            CommonCode("Thread");        });        t.Start();    }    static async void Task1()    {        await Task.Run(() => {            CommonCode("Task");        });    }    static async void Task2()    {        await Task.Run(() => {            CommonCode("Task");        });    }}
查看完整描述

1 回答

?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

Task代表一些應(yīng)該完成的工作。Thread是一個(gè)處理單元。任務(wù)可以在線程上執(zhí)行。這取決于工作負(fù)載類(lèi)型。

有兩種類(lèi)型的工作:1.IO(網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)庫(kù)查詢等)和2.CPU(任何類(lèi)型的計(jì)算)。async/await在正確使用的第一種情況下,沒(méi)有占用的線程。在第二種情況下 - 您仍然需要一個(gè)線程來(lái)完成工作。

在您的代碼中,您CommonCode使用兩個(gè)線程然后使用兩個(gè)任務(wù)并行運(yùn)行方法。CommonCode是 CPU 密集型工作負(fù)載,它是同步代碼。所以在這兩種情況下你仍然需要一個(gè)線程。預(yù)計(jì)這里沒(méi)有差異。

但對(duì)于任務(wù)來(lái)說(shuō),它可以寫(xiě)得更優(yōu)雅:

Task.WhenAll(Task1(),?Task2()).GetAwaiter().GetResult();


查看完整回答
反對(duì) 回復(fù) 2023-08-13
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)