嗯。。。我也是在园子待了不短时间的人了,一直以来汲取着园友的知识,感觉需要回馈什么。

于是以后有空我都会把一些小技巧小知识写下来,有时候可能会很短甚至很简单,但希望能帮到大家咯。

第一篇文章来说说async 和 await吧。

这是微软关于Async的介绍:http://msdn.microsoft.com/en-us/library/hh156513.aspx

这是await :http://msdn.microsoft.com/en-us/library/hh156528.aspx

这是综合起来讲:http://msdn.microsoft.com/en-us/library/hh191443.aspx

async和await用起来并不是很难,大部分人是这么用的,微软的sample是这么写的:

private async void StartButton_Click(object sender, RoutedEventArgs e)
{
// ExampleMethodAsync returns a Task<int>, which means that the method
// eventually produces an int result. However, ExampleMethodAsync returns
// the Task<int> value as soon as it reaches an await.
ResultsTextBox.Text += "\n";
try
{
int length = await ExampleMethodAsync();
// Note that you could put "await ExampleMethodAsync()" in the next line where
// "length" is, but due to when '+=' fetches the value of ResultsTextBox, you
// would not see the global side effect of ExampleMethodAsync setting the text.
ResultsTextBox.Text += String.Format("Length: {0}\n", length);
}
catch (Exception)
{
// Process the exception if one occurs.
}
} public async Task<int> ExampleMethodAsync()
{
var httpClient = new HttpClient();
int exampleInt = (await httpClient.GetStringAsync("http://msdn.microsoft.com")).Length;
ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n";
// After the following return statement, any method that's awaiting
// ExampleMethodAsync (in this case, StartButton_Click) can get the
// integer result.
return exampleInt;
}
// Output:
// Preparing to finish ExampleMethodAsync.
// Length: 53292

上面是微软给的写法,给按钮的响应方法加上async,然后await ExampleMethodAsync,让一个Length变量来接收返回值。

但是其实async和await还有另一种用法:

        private async void button_Click(object sender, RoutedEventArgs e)
{
TB_Result.Text = await exampleAsync();
}
        private async Task<string> exampleAsync()
{
return await Task.Run(() =>
{
WebClient w = new WebClient();
w.DownloadFile("http://provissy.com", "webPage1");
w.DownloadFile("http://microsoft.com", "webPage2");
string a = w.DownloadString("http://microsoft.com");
return a;
});
}

Task.Run 和 Lambda表达式,用起来其实更加简单。

在 => { }范围内写任何代码都是异步执行的,因此不用担心某几个语句是否会长时间堵住UI线程。

当然,你不能访问UI线程,否则会抛出异常。

如果不返回值,那就更简单了

        private async Task exampleAsync()
{
// 用 await exampleAsync(); 来调用即可,会立即返回。
await Task.Run(() =>
{
WebClient w = new WebClient();
w.DownloadFile("http://provissy.com", "webPage1");
w.DownloadFile("http://microsoft.com", "webPage2");
});
}

好了就这么多,以后会尽量写详细点。。。

C# & WPF 随手小记之一 ——初探async await 实现多线程处理的更多相关文章

  1. 初探async await 实现多线程处理

    初探async await 实现多线程处理 这是微软关于Async的介绍:http://msdn.microsoft.com/en-us/library/hh156513.aspx 这是await : ...

  2. WPF随手小记之二 ——改变DataGrid样式

    大部分时候我们并不需要手动改变DataGrid的样式,因为用默认的其实也看得过去,而且在DataGrid中的数据也远比外观重要. 但总有时候,我们需要做点必要的UI修改来使DataGrid更美观. 一 ...

  3. 我也来说说C#中的异步:async/await

    序 最近看了一些园友们写的有关于异步的文章,受益匪浅,写这篇文章的目的是想把自己之前看到的文章做一个总结,同时也希望通过更加通俗易懂的语言让大家了解"异步"编程. 1:什么是异步 ...

  4. 异步函数async await在wpf都做了什么?

    首先我们来看一段控制台应用代码: class Program { static async Task Main(string[] args) { System.Console.WriteLine($& ...

  5. 温故知新,CSharp遇见异步编程(Async/Await),聊聊异步编程最佳做法

    什么是异步编程(Async/Await) Async/Await本质上是通过编译器实现的语法糖,它让我们能够轻松的写出简洁.易懂.易维护的异步代码. Async/Await是C# 5引入的关键字,用以 ...

  6. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  7. async/await Task Timeout

    async/await Task Timeout 在日常的电脑使用过程中,估计最难以忍受的就是软件界面"卡住""无响应",在我有限的开发生涯中一直都是在挑战 它 ...

  8. 进阶篇:以IL为剑,直指async/await

    接上篇:30分钟?不需要,轻松读懂IL,这篇主要从IL入手来理解async/await的工作原理. 先简单介绍下async/await,这是.net 4.5引入的语法糖,配合Task使用可以非常优雅的 ...

  9. 译文: async/await SynchronizationContext 上下文问题

    async / await 使异步代码更容易写,因为它隐藏了很多细节. 许多这些细节都捕获在 SynchronizationContext 中,这些可能会改变异步代码的行为完全由于你执行你的代码的环境 ...

随机推荐

  1. CentOS 忘记 root password处理

    在倒计时启动时间,按任意键进入,例如下面的页面 输入 e. 进入这个页面.上下移动至高亮条到中间 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29yZV ...

  2. 设计管理员表;webservice用于网络安全的高端内提供服务的

    admin表设计.你应该有角色表,管理员属于一个样的作用,另一个接口选项,以查看表.角色有更多的选择的能力. 角色和选项代表了许多关系,因此,我们必须保持这种关系有一个表 版权声明:本文博客原创文章, ...

  3. BCP导出导入

    BCP导出导入大容量数据实践   前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件.各有优 ...

  4. hive建表没使用LZO存储格式,可是数据是LZO格式时遇到的问题

    今天微博大数据平台发邮件来说.他们有一个hql执行失败.可是从gateway上面的日志看不出来是什么原因导致的,我帮忙看了一下.最后找到了问题的解决办法,下面是分析过程: 1.执行失败的hql: IN ...

  5. 五个项目管理学习笔记.沟通技巧II

    两.通信模型:沟通的双向过程 沟通模型: 编     码---------------->信息-----------------> 解码&歧义 发送者               ...

  6. Java批处理操作

    批量,可以大大提高众多增加.删除.变化的步伐,它是有一个非常大的数据处理效率大收益. 的"连接池"相似.事实上就是先将多次操作(增删改)打包.然后再一次发送运行 主要用到两个方法: ...

  7. PHP MVC自己主动RBAC自己主动生成的访问路由

    使用的关键点: ReflectionClass class Rbac extends MY_Controller { public function index() { $arr = glob( __ ...

  8. 打印object对象

    在测试条件一般js时间,假定数据接口返回object对象. 假设不知道这个对象里面详细的属性就取值easy得到undefined. 哪么怎么知道一个object对象里面究竟是什么东西呢. 答案就是将其 ...

  9. char与byte差异

    很多人刚开始学习(包含I,我已经学会了一年多java该)肯会char和byte怀疑这两个数据类型,相互混淆.今天,大量的信息专门搜索,至byte和char两个数据类型进行了总结和比较.第一批成果与大家 ...

  10. OCP读书笔记(23) - 题库(ExamC)

    200.Which operation requires that you create an auxiliary instance manually before executing the ope ...