NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

预览:Visual Basic 与 C#中的异步语法

  • 2010-11-01
  • 本文字数:1400 字

    阅读完需:约 5 分钟

在最近的博客文章中,Visual Basic 团队发布了一条简单的消息,声称在 Visual Basic 和 C#中将会增加异步编程语法。两种语言新增的 Async 和 Await 关键字的实现将基于.NET 4.0 中的任务并行库(Task Parallel Library,TPL)。

Async 关键字用于方法,它将启用方法的异步行为。在这个方法中,Await 关键字将暂停当前的执行流程,直到当前异步行为结束为止。线程不会因此而暂停,它可以用于处理其他工作,例如 UI 事件。一旦异步行为结束后,方法的将继续执行余下部分。

以下是一个典型的 WPF 或 WinForm 应用程序中的“搜索”功能:

复制代码
Private Sub SearchButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles SearchButton.Click
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = False
Dim dt As DataTable = Nothing
Dim worker As New BackgroundWorker
AddHandler worker.DoWork, Sub()
PrepareSearch()
worker.ReportProgress(50)
dt = SearchDatabase()
End Sub
AddHandler worker.RunWorkerCompleted, Sub()
ResultsGrid.DataContext = dt
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = True
End Sub
AddHandler worker.ProgressChanged,
Function(a As Object, b As ProgressChangedEventArgs) _
ProgressBar1.Value = b.ProgressPercentage
worker.RunWorkerAsync()
End Sub

根据博文所写,Async VB 的版本大约如下所示:

复制代码
Private Async Sub SearchButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles SearchButton.Click
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = False
Await PrepareSearch()
ProgressBar1.Value = 50
ResultsGrid.DataContext = Await SearchDatabaseAsync()
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = True
End Sub

据称,C#和 VB 都会享有相同的设计、关键字及单元测试。因此 C#版本看上去应该是这样的:

复制代码
private async void SearchButton_Click(object sender, RoutedEventArgs e) {
ProgressBar1.Visibility = Visibility.Visible;
SearchButton.IsEnabled = false;
await PrepareSearchAsync();
ProgressBar1.Value = 50;
ResultsGrid.DataContext = await SearchDatabaseAsync();
ProgressBar1.Visibility = Visibility.Visible;
SearchButton.IsEnabled = true;
}

在这些示例中,Async 版本会返回一个 Task 对象。Await 关键字后面的代码会形成一个回调函数,在 Task 完毕后执行。这里您可能想到 CCR 类库使用 C#的“yield return”来创建 continuation 的做法。这不是巧合,事实上“await”重用了许多“yield return”代码。于是,VB 团队也趁此机会,终于完成了它们的迭代器功能。

我们相信在 PDC 中将会听到这方面更多信息。

查看英文原文: Sneak Peak: Asynchronous Syntax for Visual Basic and C#

译者注:PDC 微软最高级的专业技术人员会议。前几天在 PDC 2010 会议上,Anders Hejlsberg 发表了一场名为“C#与 Visual Basic 的未来”的演说,谈论了未来 C#和 VB 中最为重要的两个特性:“异步(Async)”及“编译器即服务(Compiler as a Service)”。国内社区的老赵对这场演讲进行了详细的总结,目前已经完成了关于异步编程的部分。

2010-11-01 03:411695
用户头像

发布了 157 篇内容, 共 52.6 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

左值引用、右值引用、移动语义、完美转发,你知道的不知道的都在这里

泰伦卢

c c++ C#

c++11新特性之std::function和lambda表达式

泰伦卢

c c++ C#

内存对齐

泰伦卢

c c++ C#

业务开发过程中的特殊逻辑

Janenesome

产品 碎碎念 开发

你真的理解线程么?

Simon郎

Java 后端 多线程

分布式限流框架 - Sentinel

Java收录阁

dubbo sentinel

数据产品经理|关于产品续费率的思考

黄大路

数据挖掘 数据分析 产品经理

Spring Cloud集成Sentinel

Java收录阁

Spring Cloud sentinel

在实战中学习项目管理

兆熊

项目管理 专栏

RAII妙用之计算函数耗时

泰伦卢

c++ C#

你体验过 “心流时刻” 吗?

Janenesome

读书笔记 高效工作 碎碎念

自助设备系列——推广

孙苏勇

产品 行业资讯 智能设备

浅析 - CocoaLumberjack 3.6 之 FileLogger

Edmond

ios log4j CocoaLumberjack DDLog 日志轮替

c++11新特性之模板的改进

泰伦卢

c c++ C#

c++11新特性之线程相关所有知识点

泰伦卢

c c++ C#

c++11新特性之智能指针

泰伦卢

c++

火箭架构思维模型六元组 - 势 道 法 术 器 界

常平

架构 分布式 架构模式

游戏夜读 | 如何制作互动剧?

game1night

Sentinel集成Nacos实现动态流控规则

Java收录阁

sentinel

C++11的类型推导详解

泰伦卢

c c++ C#

Dubbo和Spring集成的原理

Java收录阁

dubbo

c++11新特性,所有知识点都在这了!

泰伦卢

c++

产品周刊 | 第 14 期(20200510)

八味阁

产品 产品经理 产品设计

如果想了解驱动开发,请不要错过这篇。

水滴

最佳实践 开发者 程序设计 测试驱动开发实战营

一位狂热崇拜亚里士多德的男士在酒吧试图勾搭一位女士

黄大路

小说 哲学

Spring Boot自动装配的原理

Java收录阁

Spring Boot

设计模式入门和策略模式

设计模式

程序员容易忽略的问题

Janenesome

读书笔记 程序员 编程习惯

Redis学习笔记(有序集合)

编程随想曲

redis

谈知识付费

兆熊

c++11新特性之列表初始化

泰伦卢

c c++ C#

预览:Visual Basic与C#中的异步语法_.NET_Jonathan Allen_InfoQ精选文章