一起谈.NET技术,预览:Visual Basic与C#中的异步语法

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

  在最近的博客文章中,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
= TrueEnd 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中将会听到这方面更多信息。

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

  [英文出处]:Sneak Peak: Asynchronous Syntax for Visual Basic and C#

目录
相关文章
|
1天前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
10 3
|
9天前
|
消息中间件 Linux iOS开发
.NET 高性能异步套接字库,支持多协议、跨平台、高并发
【11月更文挑战第3天】本文介绍了高性能异步套接字库在网络编程中的重要性,特别是在处理大量并发连接的应用中。重点讨论了 .NET 中的 Socket.IO 和 SuperSocket 两个库,它们分别在多协议支持、跨平台特性和高并发处理方面表现出色。Socket.IO 基于 WebSocket 协议,支持多种通信协议和跨平台运行,适用于实时通信应用。SuperSocket 则通过事件驱动的异步编程模型,实现了高效的高并发处理,适用于需要自定义协议的场景。这些库各有特点,可根据具体需求选择合适的库。
|
20天前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
30 1
|
27天前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
27天前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
|
26天前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
|
26天前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
|
27天前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
26天前
|
数据可视化 NoSQL C#
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
|
27天前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)