C# Async和Await的异步编程例子

  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. // Add a using directive and a reference for System.Net.Http;
  16. using System.Net.Http;
  17. namespace AsyncFirstExample
  18. {
  19. public partial class MainWindow : Window
  20. {
  21. // Mark the event handler with async so you can use await in it.
  22. private async void StartButton_Click(object sender, RoutedEventArgs e)
  23. {
  24. // Call and await separately.
  25. //Task<int> getLengthTask = AccessTheWebAsync();
  26. //// You can do independent work here.
  27. //int contentLength = await getLengthTask;
  28. int contentLength = await AccessTheWebAsync();
  29. resultsTextBox.Text +=
  30. String.Format("\r\nLength of the downloaded string: {0}.\r\n", contentLength);
  31. }
  32. // Three things to note in the signature:
  33. // - The method has an async modifier.
  34. // - The return type is Task or Task<T>. (See "Return Types" section.)
  35. // Here, it is Task<int> because the return statement returns an integer.
  36. // - The method name ends in "Async."
  37. async Task<int> AccessTheWebAsync()
  38. {
  39. // You need to add a reference to System.Net.Http to declare client.
  40. HttpClient client = new HttpClient();
  41. // GetStringAsync returns a Task<string>. That means that when you await the
  42. // task you‘ll get a string (urlContents).
  43. Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
  44. // You can do work here that doesn‘t rely on the string from GetStringAsync.
  45. DoIndependentWork();
  46. // The await operator suspends AccessTheWebAsync.
  47. // - AccessTheWebAsync can‘t continue until getStringTask is complete.
  48. // - Meanwhile, control returns to the caller of AccessTheWebAsync.
  49. // - Control resumes here when getStringTask is complete.
  50. // - The await operator then retrieves the string result from getStringTask.
  51. string urlContents = await getStringTask;
  52. // The return statement specifies an integer result.
  53. // Any methods that are awaiting AccessTheWebAsync retrieve the length value.
  54. return urlContents.Length;
  55. }
  56. void DoIndependentWork()
  57. {
  58. resultsTextBox.Text += "Working . . . . . . .\r\n";
  59. }
  60. }
  61. }
  62. // Sample Output:
  63. // Working . . . . . . .
  64. // Length of the downloaded string: 41564.

null

时间: 2024-10-12 16:29:35

C# Async和Await的异步编程例子的相关文章

Async和Await进行异步编程

使用Async和Await进行异步编程(C#版 适用于VS2015) 你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net Framework 4.5和Windows 运行时提供了异步支持.编译器做了开发者以前做的困难的工作,而且你的应用保持了类似于异步代码的逻辑结构.结果,你轻易地就获得了所有异步编程的优势. 异步提升响应 异步对于可能阻塞的活动是至关

使用Async和Await进行异步编程(C#版 适用于VS2015)

你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net Framework 4.5和Windows 运行时提供了异步支持.编译器做了开发者以前做的困难的工作,而且你的应用保持了类似于异步代码的逻辑结构.结果,你轻易地就获得了所有异步编程的优势. 异步提升响应 异步对于可能阻塞的活动是至关重要的.例如当你的应用访问Web的时候,访问web资源有时有点慢或者延

使用Async和Await进行异步编程(C#版 适用于VS2015) z

你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net Framework 4.5和Windows 运行时提供了异步支持.编译器做了开发者以前做的困难的工作,而且你的应用保持了类似于异步代码的逻辑结构.结果,你轻易地就获得了所有异步编程的优势. 异步提升响应 异步对于可能阻塞的活动是至关重要的.例如当你的应用访问Web的时候,访问web资源有时有点慢或者延

【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单

一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 二.同步代码存在的问题 对于同步的代码,大家肯定都不陌生,因为我们平常写的代码大部分都是同步的,然而同步代码却存在一个很严重的问题,例如我们向一个Web服务器发出一个

使用 Async 和 Await 的异步编程(C#)

本篇的内容大部分来自于同事的邮件描述,本想自己用言简意赅的用语言转述,无奈语言水平有限,且同事的介绍也是极尽详细和明了,故不再画蛇添足,直接引述.... 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力.但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写.调试和维护. Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 和 Windows 运行时利用异步支持. 编译器可执行开发人员曾进行的高难度工作,且应用程序

使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]

看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力. 但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写.调试和维护. Visual Studio 2012 引入了一个简化的方法(即异步编程),该方法利用 .NET Framework 4.5 和 Windows 运行时中

使用 Async 和 Await 的异步编程 #Reprinted#

异步方法容易编写 string urlContents = await client.GetStringAsync(); 以下特征总结了使上面一个异步方法. 方法签名包含一个 Async 或async 修饰符. 异步方法的名称以“Async”后缀,按照约定,关闭. 返回类型为下列类型之一: Task<TResult>,如果您的方法具有操作个线程类型 TResult 的返回语句. Task,如果方法没有返回语句或具有返回语句不操作. 无效 (在 Visual Basic 中子 ),如果您编写一个

使用 Async 和 Await 的异步编程

来自:http://msdn.microsoft.com/library/vstudio/hh191443 异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要. 对 Web 资源的访问有时很慢或会延迟. 如果此类活动在同步过程中受阻,则整个应用程序必须等待. 在异步过程中,应用程序可继续执行不依赖 Web 资源的其他工作,直至潜在阻止任务完成. 下表显示了异步编程提高响应能力的典型区域. 从 .NET Framework 4.5 和 Windows 运行时中列出的 API 包含

使用 Async 和 Await 的异步编程 MSDN

通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力. 但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写.调试和维护. Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 和 Windows 运行时利用异步支持. 编译器可执行开发人员曾进行的高难度工作,且应用程序保留了一个类似于同步代码的逻辑结构. 因此,你只需做一小部分工作就可以获得异步编程的所有好处. 中文MSDN地址 https://msdn.micros