[.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 関係を猪股さんが翻訳してくれるようになって、 ホント読みやすくなったなぁ (^^;
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント