C# & WPF 随手小计之一 ——初探async await 实现多线程处理
来源:互联网 发布:24小时私人网络上借钱 编辑:程序博客网 时间:2024/05/16 12:56
C# & WPF 随手小计之一 ——初探async await 实现多线程处理
嗯。。。我也是在园子待了不短时间的人了,一直以来汲取着园友的知识,感觉需要回馈什么。
于是以后有空我都会把一些小技巧小知识写下来,有时候可能会很短甚至很简单,但希望能帮到大家咯。
第一篇文章来说说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"); });}
好了就这么多,以后会尽量写详细点。。。
0 0
- C# & WPF 随手小计之一 ——初探async await 实现多线程处理
- C#——await与async实现多线程异步编程
- c# 5.0——async 和 await
- C#多线程的基础整理(中)——Task和async await
- C# Async/await 异步多线程编程
- await 和 Async 初探
- Async Await初探
- C#中async/await中的异常处理
- C# 5.0 新特性——Async和Await
- c# async await
- c# async/await编程
- C# Async/await
- C# async和await
- python学习——async/await
- C#的async和await
- C#中的async与await
- C#的async和await
- C# -- Async 和 Await 解惑
- 将sublime text3添加到右键菜单中(可执行)
- oracle中case when then及decode用法
- 责任链模式
- usaco Milking Cows (贪心)
- NOIP2015 写后感
- C# & WPF 随手小计之一 ——初探async await 实现多线程处理
- bzoj 3926 [Zjoi2015]诸神眷顾的幻想乡 后缀自动机
- hdu 2181:哈密顿绕行世界问题(dfs)
- CATransform3D 特效详解
- 命令模式
- 16.10.28
- help 通用html 1.0版
- MP4转gif得力工具
- C字符串操作:字符串反转