Visual Studio 11 あるいは Visual Studio Async CTP を試したことのある開発者ならば,Visual Basic と C# の新しいキーワードである Await と Async は馴染みのものかも知れない。Microsoft は先日,将来的な非同期プログラミング機能拡張の布石となる .NET Framework 4.5 の新たな変更点のいくつかについて詳しく説明した。
非同期コードの記述は,.NET 4.5 で大幅に容易になった。複雑なメソッドやコールバックはもはや不要だ。新たな非同期タスクの構造は,開発者にとってはごく見慣れたものだろう。同期および非同期のメソッド記述例を示す。
'synchronous method Private Function GetInfo(url As String) As Byte() 'asynchronous method Private Async Function GetInfo(url As String) As Task(Of Byte())
非同期メソッドはタスクを返す。タスクの Await がコールされるとそのメソッドは直ちに中断され,タスクが完了すると再開される。構造はシンプルだが,パフォーマンス低下を回避するためには,非同期コードの実装に さらに多くの配慮が必要だ。
C# と Visual Basic 言語の変更以外にも,.NET Framework 4.5 Developer Preview には,一般的な操作を目的とする一連の非同期メソッドが追加されている。System.IO には ReadAsync,WriteAsync,CopyToAsync,その他いくつかのメソッドが追加された。また System.Data.Common と System.Data.SqlClient の多くのメソッドには,ExecuteQueryAsync や ExecuteScalarAsync,ReadAsync のように 対応する非同期版メソッド が用意されている。
ASP.NET 4.5 では HttpRequest.GetBufferlessInputStream が非同期的に利用可能になり,非同期ハンドラの記述を容易にしてタスクを活用するために HttpTaskAsyncHandler が導入された。WCF (Windows Communication Foundation) と WPF (Windows Presentation Foundation) にも新たな非同期機能が含まれている。
.NET Framework 4.5 Beta で新しい非同期機能を試してみるならば,Visual Studio Asynchronous Programming サイトを参照するとよいだろう。フレームワークは Visual Studio 11 の一部として,または Visual Studio 2010 の Async CTP を通じて提供されている。