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


      在最近的博客文章中,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#

  • 相关阅读:
    【转载】 K2 blackpearl 中的业务规则(Rules)
    【转载】工作流模式与K2实现(2)
    7.10学习内容。 J
    第三章 J
    C博客作业01分支、顺序结构
    C语言博客作业循环结构
    我的C语言第一篇博客!
    使用NDK创建及配置C++程序(原生纯C++项目,不包含JAVA代码)
    关于工作中的错误
    【博文翻译】Building Boost with NDK R5
  • 原文地址:https://www.cnblogs.com/waw/p/2163210.html
Copyright © 2020-2023  润新知