<span id="r1dp9"></span>
<span id="r1dp9"><video id="r1dp9"><ruby id="r1dp9"></ruby></video></span><ruby id="r1dp9"><video id="r1dp9"><del id="r1dp9"></del></video></ruby>
<strike id="r1dp9"></strike>
<ruby id="r1dp9"></ruby>
<th id="r1dp9"><video id="r1dp9"></video></th><strike id="r1dp9"></strike><strike id="r1dp9"><dl id="r1dp9"><ruby id="r1dp9"></ruby></dl></strike>
<span id="r1dp9"></span>
<strike id="r1dp9"><dl id="r1dp9"><ruby id="r1dp9"></ruby></dl></strike>
您當前的位置:首頁 > 電腦百科 > 程序開發 > 語言 > C/C++/C#

C#異步編程:Task.Run vs. async-await,掌握基礎與高級用法

時間:2024-03-09 11:44:31  來源:今日頭條  作者:架構師老盧

概述:C#中的異步編程有兩主要方式:Task.Run用于在后臺線程執行同步操作,而async-awAIt更適用于清晰表達異步流程?;A用法展示了它們的簡單應用,高級用法則演示了它們的結合使用,提供更靈活的異步編程模式

在C#中,Task.Run和async-await都涉及異步編程,但用法和場景有所不同。以下是詳細講解以及相應實例代碼,包括基礎和高級用法。

基礎用法:

使用Task.Run:

using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Console.WriteLine("主線程開始");

        // 使用 Task.Run 在后臺線程執行操作
        Task.Run(() => DoSomeWork());

        Console.WriteLine("主線程結束");
        Console.ReadLine();
    }

    static void DoSomeWork()
    {
        // 模擬耗時操作
        Console.WriteLine("后臺線程開始工作");
        Task.Delay(2000).Wait();
        Console.WriteLine("后臺線程完成工作");
    }
}

使用async-await:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("主線程開始");

        // 使用 async-await 執行異步操作
        await DoSomeWorkAsync();

        Console.WriteLine("主線程結束");
    }

    static async Task DoSomeWorkAsync()
    {
        // 模擬異步操作
        Console.WriteLine("異步操作開始");
        await Task.Delay(2000); // 模擬異步工作
        Console.WriteLine("異步操作完成");
    }
}

高級用法:

使用Task.Run:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("主線程開始");

        // 使用 Task.Run 在后臺線程執行操作,并等待完成
        await Task.Run(async () =>
        {
            Console.WriteLine("后臺線程開始工作");
            await DoSomeWorkAsync();
            Console.WriteLine("后臺線程完成工作");
        });

        Console.WriteLine("主線程結束");
    }

    static async Task DoSomeWorkAsync()
    {
        // 模擬異步操作
        await Task.Delay(2000); // 模擬異步工作
    }
}

使用async-await:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("主線程開始");

        // 使用 async-await 執行多個異步操作
        await Task.WhenAll(DoSomeWorkAsync(), DoAnotherWorkAsync());

        Console.WriteLine("主線程結束");
    }

    static async Task DoSomeWorkAsync()
    {
        // 模擬異步操作
        Console.WriteLine("異步操作1開始");
        await Task.Delay(2000); // 模擬異步工作
        Console.WriteLine("異步操作1完成");
    }

    static async Task DoAnotherWorkAsync()
    {
        // 模擬異步操作
        Console.WriteLine("異步操作2開始");
        await Task.Delay(1000); // 模擬異步工作
        Console.WriteLine("異步操作2完成");
    }
}

Task.Run適用于將同步操作放入異步上下文中,而async-await更適用于清晰表達異步流程。在高級用法中,兩者可以結合使用,根據具體情況選擇使用哪種方式。



Tags:C#   點擊:()  評論:()
聲明:本站部分內容及圖片來自互聯網,轉載是出于傳遞更多信息之目的,內容觀點僅代表作者本人,不構成投資建議。投資者據此操作,風險自擔。如有任何標注錯誤或版權侵犯請與我們聯系,我們將及時更正、刪除。
▌相關推薦
C# 中15個值得收藏的開源項目推薦
在開源的世界里,C# 編程語言也占有一席之地。這些開源項目涵蓋了多個領域,從框架、庫到工具,它們為C#開發者提供了豐富的資源和工具,幫助他們更高效地開發、測試和部署應用程序...【詳細內容】
2024-03-20  Search: C#  點擊:(29)  評論:(0)  加入收藏
C#異步編程:Task.Run vs. async-await,掌握基礎與高級用法
概述:C#中的異步編程有兩主要方式:Task.Run用于在后臺線程執行同步操作,而async-await更適用于清晰表達異步流程?;A用法展示了它們的簡單應用,高級用法則演示了它們的結合使...【詳細內容】
2024-03-09  Search: C#  點擊:(22)  評論:(0)  加入收藏
C# 線程本地存儲為什么線程間值不一樣
為什么用 ThreadStatic 標記的字段,只有第一個線程拿到了初始值,其他線程都是默認值,讓我能不能幫他解答一下,尼瑪,我也不是神仙什么都懂,既然問了,那我試著幫他解答一下,也給后面類...【詳細內容】
2024-01-26  Search: C#  點擊:(66)  評論:(0)  加入收藏
C# 登頂!超越Java或非空想
整理丨諾亞出品 | 51CTO技術棧(微信號:blog51cto)近日,TIOBE編程社區公布年度編程語言,此次摘得這一桂冠的是C#。這也是C#在TIOBE二十多年評選歷史中首次贏得這一年度大獎。C#雖...【詳細內容】
2024-01-15  Search: C#  點擊:(112)  評論:(0)  加入收藏
C#進程間消息傳遞
C#是一種流行的編程語言,它可以用于開發Windows應用程序。在開發Windows應用程序時,有時需要進行進程間通信,以實現不同進程之間的數據傳遞和交互。C#提供了多種方式來進行進程...【詳細內容】
2024-01-01  Search: C#  點擊:(103)  評論:(0)  加入收藏
搞懂C#文件壓縮:SharpZipLib vs. DotNetZip,實用代碼一網打盡!
在C#中,有兩個熱門的文件壓縮解析類庫分別是SharpZipLib和DotNetZip。以下是它們的簡要介紹以及使用實例代碼。1. SharpZipLib功能: 支持ZIP和GZip格式的壓縮和解壓縮。 提供...【詳細內容】
2023-12-31  Search: C#  點擊:(11)  評論:(0)  加入收藏
探秘C#中的秘密通道:五種引人注目的方法調用內部或私有方法
在 C# 中,可以使用不同的方法調用內部或私有方法。下面分別介紹通過反射、MethodInfo.CreateDelegate、表達式(樹)、動態方法(call)、動態方法(calli)這五種方法。1. 通過反射方法...【詳細內容】
2023-11-24  Search: C#  點擊:(20)  評論:(0)  加入收藏
C#參數傳遞
前幾天一個學員在學習C#與參數傳遞交互時,也不知道參數傳遞可以用來做什么 。下面我們就詳細講講C# 和參數傳遞交互的相關知識。C#是一種面向對象的編程語言,支持多種參數傳...【詳細內容】
2023-11-11  Search: C#  點擊:(213)  評論:(0)  加入收藏
C#與高級控件
前幾天一個學員在學習C#與高級控件交互時,也不知道高級控件可以用來做什么 。下面我們就詳細講講C# 和高級控件交互的相關知識。C#是一種功能豐富的面向對象編程語言,它包含...【詳細內容】
2023-11-10  Search: C#  點擊:(256)  評論:(0)  加入收藏
如何在C#客戶端程序中無縫集成Python算法
背景介紹在軟件開發領域,C#是一種廣泛應用的面向對象編程語言,具有強大的類型系統和豐富的庫支持。它常被用于開發Windows桌面應用程序、Web應用程序和服務端應用程序等。然而...【詳細內容】
2023-11-03  Search: C#  點擊:(297)  評論:(0)  加入收藏
▌簡易百科推薦
C++常見避坑指南
C++ 從入門到放棄?本文主要總結了在C++開發或review過程中常見易出錯點做了歸納總結,希望借此能增進大家對C++的了解,減少編程出錯,提升工作效率,也可以作為C++開發的避坑攻略。...【詳細內容】
2024-04-03  騰訊技術工程    Tags:C++   點擊:(4)  評論:(0)  加入收藏
C++ 之父反駁白宮警告:自誕生第一天起,C++ 的目標就一直是提高安全性
整理 | 鄭麗媛上個月,美國白宮國家網絡主任辦公室(ONCD)在一份主題為《回到基礎構件:通往安全軟件之路》的 19 頁 PDF 報告中,呼吁開發人員停止使用容易出現內存安全漏洞的編程語...【詳細內容】
2024-03-25    CSDN  Tags:C++   點擊:(4)  評論:(0)  加入收藏
八個 C++ 開源項目,幫助初學者進階成長
通過參與或閱讀開源項目的源代碼,你可以獲得豐富的實踐機會。實際的項目代碼比簡單的教程更具挑戰性,可以幫助你深入理解 C++ 的各種概念和技術。1.ThreadPool一個簡單的 C++1...【詳細內容】
2024-03-22  AI讓生活更美好  微信公眾號  Tags:C++   點擊:(21)  評論:(0)  加入收藏
C# 中15個值得收藏的開源項目推薦
在開源的世界里,C# 編程語言也占有一席之地。這些開源項目涵蓋了多個領域,從框架、庫到工具,它們為C#開發者提供了豐富的資源和工具,幫助他們更高效地開發、測試和部署應用程序...【詳細內容】
2024-03-20  程序員編程日記  微信公眾號  Tags:C#   點擊:(29)  評論:(0)  加入收藏
C#異步編程:Task.Run vs. async-await,掌握基礎與高級用法
概述:C#中的異步編程有兩主要方式:Task.Run用于在后臺線程執行同步操作,而async-await更適用于清晰表達異步流程?;A用法展示了它們的簡單應用,高級用法則演示了它們的結合使...【詳細內容】
2024-03-09  架構師老盧  今日頭條  Tags:C#   點擊:(22)  評論:(0)  加入收藏
C++多線程編程:解鎖性能與并發的奧秘
今天我們將深入探討C++中的多線程編程,揭示多線程如何解鎖性能潛力,提高程序的并發性能。什么是多線程?在計算機科學中,多線程是指一個進程(程序的執行實例)中的多個線程同時執行...【詳細內容】
2024-02-03     AI讓生活更美好  Tags:C++   點擊:(68)  評論:(0)  加入收藏
C++代碼優化攻略
今天我們將深入探討C++性能優化的世界。在當今軟件開發的浪潮中,高性能的代碼是必不可少的。無論是開發桌面應用、移動應用,還是嵌入式系統,性能都是關鍵。1. 選擇合適的數據結...【詳細內容】
2024-01-26  AI讓生活更美好  微信公眾號  Tags:C++   點擊:(112)  評論:(0)  加入收藏
C# 線程本地存儲為什么線程間值不一樣
為什么用 ThreadStatic 標記的字段,只有第一個線程拿到了初始值,其他線程都是默認值,讓我能不能幫他解答一下,尼瑪,我也不是神仙什么都懂,既然問了,那我試著幫他解答一下,也給后面類...【詳細內容】
2024-01-26  一線碼農聊技術  微信公眾號  Tags:C#   點擊:(66)  評論:(0)  加入收藏
C++質數檢測器的設計與實現?
質數,作為數學中的一個基本概念,一直以其獨特的性質吸引著眾多研究者和愛好者。質數是指大于1的自然數中,除了1和它本身以外不再有其他因數的數。在實際應用中,質數檢測也扮演著...【詳細內容】
2024-01-15  鯊魚編程  微信公眾號  Tags:C++   點擊:(110)  評論:(0)  加入收藏
C# 登頂!超越Java或非空想
整理丨諾亞出品 | 51CTO技術棧(微信號:blog51cto)近日,TIOBE編程社區公布年度編程語言,此次摘得這一桂冠的是C#。這也是C#在TIOBE二十多年評選歷史中首次贏得這一年度大獎。C#雖...【詳細內容】
2024-01-15    51CTO  Tags:C#   點擊:(112)  評論:(0)  加入收藏
站內最新
站內熱門
站內頭條
日无码在线观看