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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何避免異步方法使用新線程?

如何避免異步方法使用新線程?

C#
哈士奇WWW 2021-06-04 14:05:48
我讀過 await/async 不應(yīng)該創(chuàng)建/使用新線程,但編譯器在幕后創(chuàng)建了一個 astate 機器......所以我嘗試了這個,并且每次調(diào)用 F1 都使用來自 ThreadPool 的線程。class Program{    static System.Threading.SemaphoreSlim sem =        new System.Threading.SemaphoreSlim(20, 20);    static async void F1()    {        await sem.WaitAsync();        await sem.WaitAsync();        await Task.Delay(6000);        var threadId = GetCurrentThreadId();        sem.Release();        sem.Release();    }    static void Main(string[] args)    {        var threadId = GetCurrentThreadId();        F1();        F1();        F1();        F1();        F1();        F1();        F1();        F1();        Task.Delay(30000).Wait();    }    [DllImport("kernel32.dll")]    static extern uint GetCurrentThreadId();}
查看完整描述

2 回答

?
斯蒂芬大帝

TA貢獻1827條經(jīng)驗 獲得超8個贊

您已經(jīng)使用了await Task.Delay(6000),它保證不會同步完成,因此:完成將通過它可以返回的任何方式返回 - 通常是線程池(因為這里沒有同步上下文在起作用)。線程池線程很便宜,只要你不長時間捆綁它們;如果它所做的只是捕獲當(dāng)前線程 id 并釋放,它們應(yīng)該在它們觸發(fā)后幾乎立即完成。

代碼需要在某處運行;你希望它在什么線程上運行?您的主線程當(dāng)前處于阻塞Wait()調(diào)用中,因此它無法執(zhí)行任何操作。注意:您幾乎不應(yīng)該調(diào)用.Wait()不完整的Task.


查看完整回答
反對 回復(fù) 2021-06-05
  • 2 回答
  • 0 關(guān)注
  • 137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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