【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

预览: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:411700
用户头像

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

关注

评论

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

Prometheus 2.19.0 新特性

耳东@Erdong

Prometheus

第三周学习总结

iHai

极客大学架构师训练营

架构师训练营第三周学习总结

CATTY

week3.课后作业

个人练习生niki👍

单例模式 组合模式

还有比二分查找更快的算法,面向接口编程Protocol,John 易筋 ARTS 打卡 Week 05

John(易筋)

swift ARTS 打卡计划 二分查找 binary search protocol

第三周课后作业

iHai

极客大学架构师训练营

Redis系列(二): 连集合底层实现原理都不知道,你敢说Redis用的很溜?

z小赵

Java redis 高并发 高并发系统设计

618 我们狂欢的是什么?

Neco.W

拼多多 电商 京东 热门活动

我们是如何做go语言系统测试覆盖率收集的?

大卡尔

测试覆盖率 精准测试 Go 语言

锦囊篇|一文摸懂ButterKnife

ClericYi

面试中的HashMap、ConcurrentHashMap和Hashtable,你知道多少?

ClericYi

关于JVM,你必须知道的那些玩意儿

ClericYi

关于多线程,你必须知道的那些玩意儿

ClericYi

设计模式的十八般武艺

ClericYi

springboot整合Quartz实现定时任务(api使用篇)

北漂码农有话说

极客时间架构师训练营 - week3 - 作业 2

jjn0703

极客大学架构师训练营

架构师训练营 - 第三周命题作业

牛牛

极客大学架构师训练营 命题作业

架构师训练营 -week3- 作业

晓-Michelle

极客大学架构师训练营

学习总结 - 第3周

饶军

再谈云原生:我的看法

lidaobing

云原生 k8s 中间件

游戏夜读 | 《FPS关卡设计》

game1night

ARTS-week-4

youngitachi

ARTS 打卡计划 arts

ARTS-03 -- ARTS-04

NIMO

ARTS 打卡计划 ARTS活动

锦囊篇|一文摸懂LeakCanary

ClericYi

锦囊篇|一文摸懂Handler

ClericYi

还不会十大排序,是准备家里蹲吗!?

ClericYi

week3.学习总结

个人练习生niki👍

区块链系列教程之:比特币中的网络和区块链

程序那些事

比特币 区块链 网络 p2p

重学 Java 设计模式:实战命令模式「模拟高档餐厅八大菜系,小二点单厨师烹饪场景」

小傅哥

设计模式 小傅哥 重构 代码优化 命令模式

锦囊篇|一文摸懂EventBus

ClericYi

锦囊篇|一文摸懂OkHttp

ClericYi

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