« 新人教育向けの秀逸な課題? | トップページ | Visual Studio 2010 Beta 日本語版、 一般公開 »

2009年6月 5日 (金)

[.NET 4.0] キャンセルフレームワーク

InfoQ より。

.NET 4のキャンセルフレームワーク
作者 Al Tenhundfeld, 翻訳者 猪股 健太郎 投稿日 2009年6月4日

.NET 4 には、 キャンセルに対応したアプリケーションやライブラリの構築を支援する新しい型が含まれる予定である。 CancellationToken、 CancellationTokenSource、そしてキャンセル例外という新しい型は、 協調的なキャンセルフレームワークを提供する。

ここで言うキャンセルとは、 操作を取り消す ( undo ) ことではなくて、 長い処理の途中で中止させることです。

時間の掛かる処理は、 まず別スレッドで動かすようにして、 GUI がフリーズしないようにします。 それでも、 分単位の処理くらいになると、 こんどは途中でキャンセルできるようにしてよ、 という要求が出てきます。
そうすると、 その別スレッドの中でフラグをポーリングして処理を中断するようなコードを書くわけですが、 たしかに作りはバラバラになりますね。 ヘタすると、 ひとつのアプリの中でも、 人によって違ったりしてね f(^^;

まぁ、 そういうキャンセル処理を扱うためのフレームワークってことなんですけど、 「フレームワーク」 ってネーミングは、 ちょっと大仰なんじゃ… と思ったアナタ ( はい、 私も最初はそう思いました f(^^; )
次のサンプルコードを見てくださいな。 Parallel Programming with .NET の ".NET 4 Cancellation Framework" ( Posted: Friday, May 22, 2009 ) より引用。

CancellationTokenSource cts
    = new CancellationTokenSource();
var query = data.AsParallel()
    .WithCancellation(cts.Token)
    .Select((x) => SlowFunc(x, cts.Token));

これは、 LINQ のライブラリ内での処理中でもキャンセルできる、 ということなんでしょう。 このサンプルだけでは、 ちょっと言い切っていいかどうかわからないんですが、 LINQ to SQL で SQL Server からの応答待ち中でもキャンセルできるんではないでしょうか。

希望的観測ですけど、 .NET Framework の中で処理に長時間掛かる可能性があるところは、 順次このキャンセルフレームワーク対応に変えていくよ、 ということなんだと思います。


# それにつけても。 .NET 関係を猪股さんが翻訳してくれるようになって、 ホント読みやすくなったなぁ (^^;

|

« 新人教育向けの秀逸な課題? | トップページ | Visual Studio 2010 Beta 日本語版、 一般公開 »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [.NET 4.0] キャンセルフレームワーク:

« 新人教育向けの秀逸な課題? | トップページ | Visual Studio 2010 Beta 日本語版、 一般公開 »