西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发C#.NET → C#5.0全新的异步编程模型介绍

C#5.0全新的异步编程模型介绍

相关软件相关文章发表评论 来源:西西整理时间:2012/9/11 19:00:11字体大小:A-A+

作者:佚名点击:62次评论:2次标签: 异步编程

.NET Framework 2.0 x64sp2 官方完整版
  • 类型:编程控件大小:45.1M语言:中文 评分:1.0
  • 标签:
立即下载

1.异步方法的实现原理

异步方法不需要多线程,因为一个异步方法并不是运行在一个独立的线程中的。

异步方法运行在当前同步上下文中,只有激活的时候才占用当前线程的时间。

异步模型采用时间片轮转来实现。

2.使用异步编程模型的优势:

避免性能瓶颈,提升应用程序的整体响应性。

3.关键字

   全新的异步编程模型使用“async”和“await”关键字来编写异步方法

async:用来标识一个方法,lambda表达式,或者一个匿名方法是异步的;

await:用来标识一个异步方法应该在此处挂起执行,直到等待的任务完成,于此同时,控制权会移交给异步方法的调用方。

4.异步方法的参数和返回值

异步方法的参数: 不能使用“ref”参数和“out”参数,但是在异步方法内部可以调用含有这些参数的方法

异步方法的返回类型:

  Task<TResult>:Tresult为异步方法的返回值类型。

  Task:异步方法没有返回值。

  void:主要用于事件处理程序(不能被等待,无法捕获异常)。

5.异步方法的命名规范

*异步方法的方法名应该以Async作为后缀

*事件处理程序,基类方法和接口方法,可以忽略此命名规范:

*例如: 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.异步方法的执行序列

1:  进入startButton_Click方法

           调用 AccessTheWebAsync.

2:   进入 AccessTheWebAsync

           调用HttpClient.GetStringAsync.

3:  回到 AccessTheWebAsync

           任务getStringTask开始.

           等待getStringTask & 返回一个Task<int>实例给startButton_Click.

4:  回到startButton_Click

           任务getLengthTask开始

           等待getLengthTask.

5:  回到AccessTheWebAsync

           任务getStringTask已经完成.

           执行return语句.

           退出AccessTheWebAsync.

6:   回到startButton_Click

           任务getLengthTask已经完成.

           AccessTheWebAsync 的结果被存储到contentLength.

           显示contentLength 然后退出.

    .net framework
    (10).net framework
    .是一个框架,包括公共语言运行时和.基本类库,是用.语言编写的程序运行的基本支撑。即要想在某台计算机上运行.编写的程序,必须事先要安装.。你可以这么理解。就是一个中间件。这个中间件将.高级语言转成机器语言。没有.运行环境就不能运行不了.程序西西本页提供.下载大全,,.版本怎么查看方法一第一步打开我的电脑,在地址栏输入.第二步从列出来的文件夹中,我们可以看到......而这些目录显示的最高版本号即本机.版本号,也就是.的...更多>>
    net framework
    (13)net framework
    西西软件园提供.....版本下载,是系统中一个非常重要的环境工具,如果缺少了,我们电脑中的大部分软件以及游戏都不能够运行,.版可再发行组件包将安装运行针对.版开发的应用程序时所需的.运行库及相关文件。...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(2)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)