西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)C#.NET → C#5.0全新的異步編程模型介紹

C#5.0全新的異步編程模型介紹

相關軟件相關文章發(fā)表評論 來源:西西整理時間:2012/9/11 19:00:11字體大小:A-A+

作者:佚名點擊:62次評論:2次標簽: 異步編程

.NET Framework 2.0 x64sp2 官方完整版
  • 類型:編程控件大。45.1M語言:中文 評分:1.0
  • 標簽:
立即下載

1.異步方法的實現(xiàn)原理

異步方法不需要多線程,因為一個異步方法并不是運行在一個獨立的線程中的。

異步方法運行在當前同步上下文中,只有激活的時候才占用當前線程的時間。

異步模型采用時間片輪轉來實現(xiàn)。

2.使用異步編程模型的優(yōu)勢:

避免性能瓶頸,提升應用程序的整體響應性。

3.關鍵字

   全新的異步編程模型使用“async”和“await”關鍵字來編寫異步方法

async:用來標識一個方法,lambda表達式,或者一個匿名方法是異步的;

await:用來標識一個異步方法應該在此處掛起執(zhí)行,直到等待的任務完成,于此同時,控制權會移交給異步方法的調用方。

4.異步方法的參數(shù)和返回值

異步方法的參數(shù): 不能使用“ref”參數(shù)和“out”參數(shù),但是在異步方法內部可以調用含有這些參數(shù)的方法

異步方法的返回類型:

  Task<TResult>:Tresult為異步方法的返回值類型。

  Task:異步方法沒有返回值。

  void:主要用于事件處理程序(不能被等待,無法捕獲異常)。

5.異步方法的命名規(guī)范

*異步方法的方法名應該以Async作為后綴

*事件處理程序,基類方法和接口方法,可以忽略此命名規(guī)范:

*例如: startButton_Click不應重命名為startButton_ClickAsync

6.一個Demo

1 <Window
2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="AsyncSample.MainWindow"
5         Title="Control Flow Trace" Height="350" Width="592">
6     <Grid>
7         <Button x:Name="startButton" Content="Start&#xa;" HorizontalAlignment="Left" Margin="250,10,0,0" VerticalAlignment="Top" Width="75" Height="24"  Click="startButton_Click" d:LayoutOverrides="GridBox"/>
8         <TextBox x:Name="resultsTextBox" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Bottom" Width="576" Height="265" FontFamily="Lucida Console" FontSize="10" VerticalScrollBarVisibility="Visible" Grid.ColumnSpan="3"/>
9     </Grid>
10 </Window>

1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows;
7 using System.Windows.Controls;
8 using System.Windows.Data;
9 using System.Windows.Documents;
10 using System.Windows.Input;
11 using System.Windows.Media;
12 using System.Windows.Media.Imaging;
13 using System.Windows.Navigation;
14 using System.Windows.Shapes;
15 using System.Net.Http;
16
17 namespace AsyncSample
18 {
19     /// <summary>
20     /// MainWindow.xaml 的交互邏輯
21     /// </summary>
22     public partial class MainWindow : Window
23     {
24         public MainWindow()
25         {
26             InitializeComponent();
27            
28         }
29         private async void startButton_Click(object sender, RoutedEventArgs e)
30         {
31             // 1
32             Task<string> getLengthTask = AccessTheWebAsync();
33
34             // 4
35             string contentLength = await getLengthTask;
36
37             // 6
38             resultsTextBox.Text +=
39                 String.Format("\r\nLength of the downloaded string: {0}.\r\n", contentLength);
40         }
41
42
43         async Task<string> AccessTheWebAsync()
44         {
45             // 2
46             HttpClient client = new HttpClient();
47             Task<string> getStringTask =
48                 client.GetStringAsync(http://www.cnblogs.com);
49
50             // 3               
51             string urlContents = await getStringTask;
52
53             // 5
54             return urlContents;
55         }
56     }
57 }

7.異步方法的執(zhí)行序列

1:  進入startButton_Click方法

           調用 AccessTheWebAsync.

2:   進入 AccessTheWebAsync

           調用HttpClient.GetStringAsync.

3:  回到 AccessTheWebAsync

           任務getStringTask開始.

           等待getStringTask & 返回一個Task<int>實例給startButton_Click.

4:  回到startButton_Click

           任務getLengthTask開始

           等待getLengthTask.

5:  回到AccessTheWebAsync

           任務getStringTask已經(jīng)完成.

           執(zhí)行return語句.

           退出AccessTheWebAsync.

6:   回到startButton_Click

           任務getLengthTask已經(jīng)完成.

           AccessTheWebAsync 的結果被存儲到contentLength.

           顯示contentLength 然后退出.

    .net framework
    (10).net framework
    .是一個框架,包括公共語言運行時和.基本類庫,是用.語言編寫的程序運行的基本支撐。即要想在某臺計算機上運行.編寫的程序,必須事先要安裝.。你可以這么理解。就是一個中間件。這個中間件將.高級語言轉成機器語言。沒有.運行環(huán)境就不能運行不了.程序西西本頁提供.下載大全,,.版本怎么查看方法一第一步打開我的電腦,在地址欄輸入.第二步從列出來的文件夾中,我們可以看到......而這些目錄顯示的最高版本號即本機.版本號,也就是.的...更多>>
    net framework
    (13)net framework
    西西軟件園提供.....版本下載,是系統(tǒng)中一個非常重要的環(huán)境工具,如果缺少了,我們電腦中的大部分軟件以及游戲都不能夠運行,.版可再發(fā)行組件包將安裝運行針對.版開發(fā)的應用程序時所需的.運行庫及相關文件。...更多>>
    • Microsoft .NET Framework 2.0 SP2

      07-14 / 23.2M

      推薦理由:.NET Framework 2.0 Service Pack 2 是專為解決客戶在 .NET Framework 2.0 發(fā)布后報告的問題而提供的累積更
    • .NET Framework2.0 安裝版

      05-15 / 23.9M

      推薦理由:Microsoft .NET Framework 2.0 版可再發(fā)行組件包將安裝運行針對 .NET Framework 2.0 版開發(fā)的應用程序時所需
    • .NET Framework3.5 官方完整版

      05-15 / 197.1M

      推薦理由: .NET Framework 3.0 中增加了不少新功能,例如 Windows Workflow Foundation (WF)、Windows Communic
    • Microsoft .NET FrameworkV4.0 Fin

      05-15 / 35.3M

      推薦理由:Microsoft .NET Framework 版可再發(fā)行組件包將安裝運行針對 .NET Framework 版開發(fā)的應用程序時所需的 .NET
    • Microsoft .NET Framework1.1簡體中

      03-07 / 21.4M

      推薦理由:.NET Framework 1.1 版可再發(fā)行組件包中包括您在運行那些使用 .NET Framework 開發(fā)的應用程序時所需要的一切
    • Microsoft.NET Frameworks3.5 SP1

      05-15 / 2.9M

      推薦理由:前幾天隨著VS2008 SP1的發(fā)布,.NET Framework 3.5 SP1也來到了我們面前。 Microsoft .NET Framework 3.5

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(2)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)