微软示例:

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

但是其实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线程,否则会抛出异常。

要是访问UI线程,可以加上Dispacter.BeginInvoke();

最新文章

  1. sql 简单事务例子
  2. signalR制作微信墙 开源
  3. [SAP ABAP开发技术总结]IDoc
  4. java8新语法
  5. html标签属性
  6. 已经被cocos2dx给折腾的想要放弃它,专注Unity3D的怀抱了!
  7. MEF 编程指南(十一):查询 CompositionContainer
  8. 初次接触Object对象变量
  9. 【FSFA 读书笔记】Ch 2 Computer Foundatinons(2)
  10. 整个网站灰度显示css代码
  11. servlet tomcat eclipse
  12. Erlang OTP gen_event
  13. jQuery仿百度帖吧头部固定不随滚动条滚动效果
  14. React之ref详细用法
  15. 花生壳DDNS为何不支持LetsEncrypt申请
  16. MyBatis联表查询
  17. 基于前台vue,后台是spring boot的压缩图片上传
  18. 使用githubpages主题NexT的语法
  19. C语言数据结构基础学习笔记——C语言基础
  20. vb.bet 控件

热门文章

  1. (4.20)sql server分离附加操作
  2. Arcpy里莫名其妙的字段类型(Field type)
  3. Codeforces 1175E 倍增
  4. 基于Libpcap实现一个网络数据包嗅探器
  5. bzoj4237稻草人
  6. shell编写启动脚本
  7. Nginx---文档(从入门到精通)
  8. Python Class (一)
  9. DLL中使用字符串时的注意事项。
  10. [bzoj2839]集合计数 题解 (组合数+容斥)