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

async/await 與console(C#)

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

問題:

上一篇async/await 致WPF卡死問題(https://www.cnblogs.com/stephen2023/p/17725159.html),介紹主線程阻塞,async/await導(dǎo)致卡死問題,同樣的代碼在console下卻并不會(huì)出現(xiàn)卡死。

        static Stopwatch sw = new Stopwatch();

        static void log(string message)
        {
            Console.WriteLine($"{sw.ElapsedMilliseconds}:{message} by Thread:{Thread.CurrentThread.ManagedThreadId}");
        }

        static void Main(string[] args)
        {
            sw.Start();
            log("Main() Started!");
            var t = getResult().Result;
            log($"got result:{t}");
            log("Main() is Ended!");
            Console.ReadKey();

        }

        public static async Task<int> getResult()
        {
            await Task.Delay(1000);
        log("get result is about to return");
            return 10;
        }

并且await后的任務(wù)也是由“新線程”執(zhí)行的,并非主線程執(zhí)行。

分析:

對(duì)于如下含await的代碼

await FooAsync();
RestOfMethod();

可以類比于:

var t = FooAsync();
var currentContext = SynchronizationContext.Current;
t.ContinueWith(delegate
{
    if (currentContext == null)
        RestOfMethod();
    else
        currentContext.Post(delegate { RestOfMethod(); }, null);
}, TaskScheduler.Current);

WPF與Console不同的關(guān)鍵在于SynchronizationContext,對(duì)于WPF,繼承了SynchronizationContextDispatcherSynchronizationContext 并重寫了post方法,將委托任務(wù)交由UI線程處理,而console程序并沒有,當(dāng)前的SynchronizationContext為null,所以對(duì)于console程序await后續(xù)的任務(wù)任由執(zhí)行await異步任務(wù)的線程執(zhí)行,相當(dāng)于上一篇的ConfigureAwait(false),主線程阻塞,并不會(huì)出現(xiàn)卡死現(xiàn)象。

?

?

?

翻譯

搜索

復(fù)制文章來源地址http://www.zghlxwxcb.cn/news/detail-712107.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

  • C#中await /async 的使用場景,優(yōu)點(diǎn),使用方法介紹

    C#中await /async 的使用場景,優(yōu)點(diǎn),使用方法介紹

    ? async/await ?是 C# 中異步編程的關(guān)鍵特性,它使得異步代碼編寫更為簡單和直觀。下面深入詳細(xì)描述了? async/await ?的使用場景、優(yōu)點(diǎn)以及一些高級(jí)使用方法,并提供了相應(yīng)的實(shí)例源代碼。 I/O 操作: ?異步編程特別適用于涉及 I/O 操作(如文件讀寫、網(wǎng)絡(luò)請(qǐng)求等)的場景。在

    2024年02月05日
    瀏覽(17)
  • async/await 在 C# 語言中是如何工作的?(下)

    async/await 在 C# 語言中是如何工作的?(下)

    接《async/await 在 C# 語言中是如何工作的?(上)》、《async/await 在 C# 語言中是如何工作的?(中)》,今天我們繼續(xù)介紹?SynchronizationContext 和 ConfigureAwait。 ? ▌SynchronizationContext 和 ConfigureAwait 我們之前在 EAP 模式的上下文中討論過 SynchronizationContext,并提到它將再次出現(xiàn)。

    2024年02月08日
    瀏覽(25)
  • Unity C# 之 Task、async和 await 結(jié)合使用的一些情況處理

    目錄 Unity C# 之 Task、async和 await? 結(jié)合使用的一些情況處理 一、簡單介紹 二、把 async 函數(shù),通過變化轉(zhuǎn)為一般的函數(shù) 三、在 async 函數(shù)中,切換到主線程,并等待主線程執(zhí)行完畢,繼續(xù) async 中的代碼 Unity 在使用 Task 結(jié)合 async (await) 的時(shí)候,偶爾會(huì)遇到一些特殊情況,需要

    2024年01月22日
    瀏覽(21)
  • 深入探討 C# 和 .NET 中 async/await 的歷史、背后的設(shè)計(jì)決策和實(shí)現(xiàn)細(xì)節(jié)

    對(duì) async/await 的支持已經(jīng)存在了十多年。它的出現(xiàn),改變了為 .NET 編寫可伸縮代碼的方式,你在不了解幕后的情況下也可以非常普遍地使用該功能。 從如下所示的同步方法開始(此方法是“ 同步的 ”,因?yàn)樵谡麄€(gè)操作完成并將控制權(quán)返回給調(diào)用方之前,調(diào)用方將無法執(zhí)行任何

    2024年02月08日
    瀏覽(28)
  • Unity C# 之 Task、async和 await 、Thread 基礎(chǔ)使用的Task的簡單整理

    Unity C# 之 Task、async和 await 、Thread 基礎(chǔ)使用的Task的簡單整理

    目錄 Unity C# 之 Task、async和 await 、Thread 基礎(chǔ)使用的Task的簡單整理 一、Task、async和 await 、Thread 基礎(chǔ)概念 1、線程,多線程 2、Task ?3、async (await ) 二、Task 的基礎(chǔ)使用,Task 的創(chuàng)建 和 啟動(dòng) 1、創(chuàng)建并運(yùn)行一個(gè)Task 2、創(chuàng)建有返回值的 Task 3、Task提供了 task.RunSynchronously()用于同步

    2024年02月12日
    瀏覽(19)
  • C# 解決 https請(qǐng)求 ssl證書問題,看我一篇通通解決

    廢話不多說,直接上代碼,實(shí)干興邦,空談?wù)`國!光說不貼源代碼更是耍流氓! 針對(duì)舊版本的接口框架,.netformwork4.5以下,加上傳統(tǒng)的ssl機(jī)制即可解決問題。 針對(duì).net core版本的框架,采用ssl證書驗(yàn)證回調(diào)的方式,其中方案二和方案三同屬于一種解決方式,方案三的更直接明了

    2024年02月16日
    瀏覽(30)
  • Unity中的異步編程【5】——在Unity中使用 C#原生的異步(Task,await,async) - System.Threading.Tasks

    Unity中的異步編程【5】——在Unity中使用 C#原生的異步(Task,await,async) - System.Threading.Tasks

    1、System.Threading.Tasks中的Task是.Net原生的異步和多線程包。 2、UniTask(Cysharp.Threading.Tasks)是仿照.Net原生的Task,await,async開發(fā)的一個(gè)包,該包專門服務(wù)于Unity,所以取名UnityTask,簡稱UniTask。 3、既然有Task了,為啥還要搞一個(gè)UniTask (1)Task可以用在PC和Android上,但是在WebGL上則會(huì)

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

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

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

    2024年02月05日
    瀏覽(25)
  • 一文讀懂異步和同步——async/await在運(yùn)行時(shí)和普通代碼的執(zhí)行順序的問題

    一文讀懂異步和同步——async/await在運(yùn)行時(shí)和普通代碼的執(zhí)行順序的問題

    一、執(zhí)行順序問題 JavaScript中的await語句是異步編程中用于等待Promise對(duì)象執(zhí)行結(jié)果的,它通常與async函數(shù)一起使用。在使用await時(shí),程序的執(zhí)行將暫停,直到該后面的Promise對(duì)象完成執(zhí)行并返回結(jié)果。 函數(shù)代碼執(zhí)行順序通常情況下按照代碼所在文件從上至下

    2024年02月03日
    瀏覽(20)
  • async和await

    Node.JS官方文檔:https://nodejs.dev/en/ 創(chuàng)建異步函數(shù),并返回相關(guān)數(shù)值: 一般方式創(chuàng)建 通過async方式創(chuàng)建: 在async聲明的函數(shù)中可以使用await來調(diào)用異步函數(shù) 當(dāng)我們通過await去調(diào)用異步函數(shù)時(shí)候,它會(huì)暫停代碼的運(yùn)行 直到異步代碼執(zhí)行有結(jié)果時(shí),才會(huì)將結(jié)果返回 注意 awa

    2024年02月02日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包