預覽:Visual Basic與C#中的異步語法

來源: InfoQ  發布時間: 2010-11-02 23:49  閱讀: 1028 次  推薦: 0   原文鏈接   [收藏]  
摘要:在最近的博客文章中,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#

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()