a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

.net4.5使用async和await異步編程實例

2020-01-24 02:59:39
字體:
來源:轉載
供稿:網友

關于異步編程的簡單理解:

在.NET4.5中新增了異步編程的新特性async和await,使得異步編程更為簡單。通過特性可以將這項復雜的工作交給編譯器來完成了。之前傳統的方式來實現異步編程較為復雜,這樣對于程序猿來說處理起來比較困難,調試也沒那么方便,后續的維護工作也比較痛苦。

Async和Await關鍵字是C#異步編程的核心。通過使用這兩個關鍵字,你可以使用.NET Framework 或 Windows Runtime的資源創建一個異步方法如同創建一個同步方法一樣容易。

接下來通過VS2013 創建一個基于.NET4.5的控制臺應用程序進行嘗試。

先直接把簡單的代碼貼出來,如下所示

復制代碼 代碼如下:

/// <summary>
        /// 同步方法打印Hello World
        /// </summary>
        public static void PrintHelloWorld()
        {
            Console.WriteLine("同步方法調用開始");
            Console.WriteLine("同步方法:Hello World");
            Thread.Sleep(1000);
            Console.WriteLine("退出同步方法");
        }

        /// <summary>
        /// 異步方法打印Hello World
        /// </summary>
        public async static void AsyncPrintHelloWorld()
        {
            Console.WriteLine("異步方法調用開始");
            Console.WriteLine("異步方法:Hello World");
            await Task.Delay(1000);
            Console.WriteLine("退出異步方法");
        }

上面注釋中也有進行說明,第一個是同步方法,第二個是異步方法。同步方法可以通過Thread.Sleep(1000);暫停方法執行1000ms,同樣的異步方法可以通過await Task.Delay(1000)來處理,而且在異步方法的聲明中要加入async的關鍵字。

接下來是簡單的調用

復制代碼 代碼如下:

static void Main(string[] args)
        {
            Console.WriteLine("======同步方法調用=====");
            PrintHelloWorld();
            Console.WriteLine("同步方法調用結束");

            Console.WriteLine("======異步方法調用=====");
            AsyncPrintHelloWorld();
            Console.WriteLine("異步方法調用結束");
            Console.ReadLine();
        }

F5執行后結果如下

通過執行結果可以很明顯的看出,調用的同步方法里面是順序執行的,而在異步方法中不一樣,當通過Task.Delay(1000)暫停當前方法的時候,其方法外面的下面的方法會繼續執行,也就是打印“異步方法調用結束”的語句。

可以發現使用了關鍵字之后,同步與異步的語法差別很小。隨著.NET4.5的推出,許多類庫和已有類庫都將支持這種新型的異步語法,比如我正在學習的HTTPClient等等。

上面的演示只是通過簡單的void的方法進行演示的,當然肯定可以帶上返回值的額。

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Async
{
    class Program
    {
        static void Main(string[] args)
        {
            var ret = AsyncAdd("累死了,真想不出啥好的例子來調用");
            Console.WriteLine(ret.Result);
            Console.ReadLine();
        }
           

        ///異步打印傳入的字符串
        public async static Task<string> AsyncAdd(string str)
        {
            string result = await PringString(str);
            return result;

        }

        public async static Task<string> PringString(string str)
        {
            return "Hello World" + str;
        }
    }
}

通過運行其實和同步的是一樣的,只不過看看如何來定義異步方法的返回值,根據Task<T>來進行定義。

如果指定Task<TResult>為返回結果,那么這個方法必須包含return指定的TResult結果的語句。

一個async方法里通常包含一個或多個的對應的await操作符,但如果沒有await表達式也不會導致編譯錯誤。但如果調用一個async方 法,卻不使用await關鍵字來標記一個掛起點的話,程序將會忽略async關鍵字并以同步的方式執行

總結

1.一個異步方法的聲明中必然包含一個async的修飾符。

 2.異步方法的方法名可以以“Async”結尾。

 3.Task<TResult> 當你的方法有返回值時,那么TResult即返回值的類型

 4.方法通常至少包含一個await表達式。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜免费观看网站 | 污网站大全 | 亚洲午夜精品一区二区三区 | 亚洲免费视频网址 | 99精品国产一区二区三区 | 久草综合网 | 国产精品成人网 | 欧美日韩一二 | 精品成人在线 | 在线观看成人高清 | 精品九九 | 91视频免费污| 久久精品久久久久久久久久久久久 | 国产精品一区二 | 国产精品久久久久久久岛一牛影视 | 黄色片地址 | 在线欧美视频 | 国产精品毛片一区二区在线看 | 欧美精品福利视频 | 午夜国产羞羞视频免费网站 | 国产精品美女www爽爽爽动态图 | 在线中文| 青青草免费在线 | 精品国产乱码久久久久久1区2区 | 激情久久久久 | 欧洲精品一区 | 高清国产午夜精品久久久久久 | 国产精品成人国产乱一区 | 国产精品二区一区二区aⅴ污介绍 | 黄色成人av | 欧美午夜一区二区三区免费大片 | 亚洲一级黄色 | 亚洲欧洲一区二区三区 | 天天干干 | 狠狠插天天干 | 久久久久久久成人 | 三级网站视频 | 第一福利丝瓜av导航 | 国产福利一区二区三区四区 | av网站免费观看 | 日韩高清黄色 |