欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.net4.5使用async和await異步編程實(shí)例

 更新時(shí)間:2013年12月18日 11:34:09   作者:  
.net4.5使用async和await異步編程實(shí)例,大家參考使用吧

關(guān)于異步編程的簡(jiǎn)單理解:

在.NET4.5中新增了異步編程的新特性async和await,使得異步編程更為簡(jiǎn)單。通過(guò)特性可以將這項(xiàng)復(fù)雜的工作交給編譯器來(lái)完成了。之前傳統(tǒng)的方式來(lái)實(shí)現(xiàn)異步編程較為復(fù)雜,這樣對(duì)于程序猿來(lái)說(shuō)處理起來(lái)比較困難,調(diào)試也沒(méi)那么方便,后續(xù)的維護(hù)工作也比較痛苦。

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

接下來(lái)通過(guò)VS2013 創(chuàng)建一個(gè)基于.NET4.5的控制臺(tái)應(yīng)用程序進(jìn)行嘗試。

先直接把簡(jiǎn)單的代碼貼出來(lái),如下所示

復(fù)制代碼 代碼如下:

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

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

上面注釋中也有進(jìn)行說(shuō)明,第一個(gè)是同步方法,第二個(gè)是異步方法。同步方法可以通過(guò)Thread.Sleep(1000);暫停方法執(zhí)行1000ms,同樣的異步方法可以通過(guò)await Task.Delay(1000)來(lái)處理,而且在異步方法的聲明中要加入async的關(guān)鍵字。

接下來(lái)是簡(jiǎn)單的調(diào)用

復(fù)制代碼 代碼如下:

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

            Console.WriteLine("======異步方法調(diào)用=====");
            AsyncPrintHelloWorld();
            Console.WriteLine("異步方法調(diào)用結(jié)束");
            Console.ReadLine();
        }

F5執(zhí)行后結(jié)果如下

通過(guò)執(zhí)行結(jié)果可以很明顯的看出,調(diào)用的同步方法里面是順序執(zhí)行的,而在異步方法中不一樣,當(dāng)通過(guò)Task.Delay(1000)暫停當(dāng)前方法的時(shí)候,其方法外面的下面的方法會(huì)繼續(xù)執(zhí)行,也就是打印“異步方法調(diào)用結(jié)束”的語(yǔ)句。

可以發(fā)現(xiàn)使用了關(guān)鍵字之后,同步與異步的語(yǔ)法差別很小。隨著.NET4.5的推出,許多類(lèi)庫(kù)和已有類(lèi)庫(kù)都將支持這種新型的異步語(yǔ)法,比如我正在學(xué)習(xí)的HTTPClient等等。

上面的演示只是通過(guò)簡(jiǎn)單的void的方法進(jìn)行演示的,當(dāng)然肯定可以帶上返回值的額。

復(fù)制代碼 代碼如下:

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("累死了,真想不出啥好的例子來(lái)調(diào)用");
            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;
        }
    }
}

通過(guò)運(yùn)行其實(shí)和同步的是一樣的,只不過(guò)看看如何來(lái)定義異步方法的返回值,根據(jù)Task<T>來(lái)進(jìn)行定義。

如果指定Task<TResult>為返回結(jié)果,那么這個(gè)方法必須包含return指定的TResult結(jié)果的語(yǔ)句。

一個(gè)async方法里通常包含一個(gè)或多個(gè)的對(duì)應(yīng)的await操作符,但如果沒(méi)有await表達(dá)式也不會(huì)導(dǎo)致編譯錯(cuò)誤。但如果調(diào)用一個(gè)async方 法,卻不使用await關(guān)鍵字來(lái)標(biāo)記一個(gè)掛起點(diǎn)的話(huà),程序?qū)?huì)忽略async關(guān)鍵字并以同步的方式執(zhí)行

總結(jié)

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

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

 3.Task<TResult> 當(dāng)你的方法有返回值時(shí),那么TResult即返回值的類(lèi)型

 4.方法通常至少包含一個(gè)await表達(dá)式。

相關(guān)文章

  • 為Xamarin.Forms的導(dǎo)航欄增加搜索功能

    為Xamarin.Forms的導(dǎo)航欄增加搜索功能

    這篇文章介紹了為Xamarin.Forms的導(dǎo)航欄增加搜索功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C# 創(chuàng)建EXCEL圖表并保存為圖片的實(shí)例

    C# 創(chuàng)建EXCEL圖表并保存為圖片的實(shí)例

    下面小編就為大家分享一篇C# 創(chuàng)建EXCEL圖表并保存為圖片的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 詳解C# 中Session的用法

    詳解C# 中Session的用法

    這篇文章主要介紹了C# 中Session的用法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 一看就懂:圖解C#中的值類(lèi)型、引用類(lèi)型、棧、堆、ref、out

    一看就懂:圖解C#中的值類(lèi)型、引用類(lèi)型、棧、堆、ref、out

    這篇文章主要介紹了一看就懂:圖解C#中的值類(lèi)型、引用類(lèi)型、棧、堆、ref、out,本文用淺顯易懂的語(yǔ)言組織介紹了這些容易混淆的概念,需要的朋友可以參考下
    2015-06-06
  • WPF自定義控件的實(shí)現(xiàn)

    WPF自定義控件的實(shí)現(xiàn)

    本文主要介紹了WPF自定義控件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C#敏感詞過(guò)濾實(shí)現(xiàn)方法

    C#敏感詞過(guò)濾實(shí)現(xiàn)方法

    這篇文章主要介紹了C#敏感詞過(guò)濾實(shí)現(xiàn)方法,涉及C#針對(duì)字符串操作的常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#實(shí)現(xiàn)利用反射簡(jiǎn)化給類(lèi)字段賦值的方法

    C#實(shí)現(xiàn)利用反射簡(jiǎn)化給類(lèi)字段賦值的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)利用反射簡(jiǎn)化給類(lèi)字段賦值的方法,涉及C#操作反射的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C# 禁用鼠標(biāo)中間鍵的方法

    C# 禁用鼠標(biāo)中間鍵的方法

    關(guān)于?。? System.Windows.Forms.NumericUpDown 控件,如何禁用鼠標(biāo)中間鍵?
    2013-03-03
  • C#復(fù)制數(shù)組的兩種方式及效率比較

    C#復(fù)制數(shù)組的兩種方式及效率比較

    這篇文章介紹了C#復(fù)制數(shù)組的兩種方式及效率比較,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • C# RGB圖像和灰度圖像互轉(zhuǎn)的實(shí)現(xiàn)

    C# RGB圖像和灰度圖像互轉(zhuǎn)的實(shí)現(xiàn)

    在我們的圖像類(lèi)型教程中定義了RGB顏色模型和灰度格式,本文主要介紹了C# RGB圖像和灰度圖像互轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)代碼介紹的非常清楚,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08

最新評(píng)論