回答編集履歴
2
ハイパーリンク設定
answer
CHANGED
@@ -144,7 +144,7 @@
|
|
144
144
|
キャンセル処理の基本は Microsoft のドキュメント「マネージド スレッドのキャンセル」(URL 下記)に書いてありますので読んでみてください。
|
145
145
|
|
146
146
|
マネージド スレッドのキャンセル
|
147
|
-
https://docs.microsoft.com/ja-jp/dotnet/standard/threading/cancellation-in-managed-threads
|
147
|
+
[https://docs.microsoft.com/ja-jp/dotnet/standard/threading/cancellation-in-managed-threads](https://docs.microsoft.com/ja-jp/dotnet/standard/threading/cancellation-in-managed-threads)
|
148
148
|
|
149
149
|
それに書いてありますが、キャンセル処理を実装するための一般的なパターンは以下の通りだそうです。
|
150
150
|
|
1
追記
answer
CHANGED
@@ -137,4 +137,22 @@
|
|
137
137
|
|
138
138
|
実行結果は以下のようになります。[RunProcTask 起動]ボタンクリックで同期版のメソッド RunProcTask を Task.Run で起動し、そのボタンのハンドラに追加した this.cts.CancelAfter(5000); により 5 秒後にキャンセルされたところです。
|
139
139
|
|
140
|
-

|
140
|
+

|
141
|
+
|
142
|
+
**【追記】**
|
143
|
+
|
144
|
+
キャンセル処理の基本は Microsoft のドキュメント「マネージド スレッドのキャンセル」(URL 下記)に書いてありますので読んでみてください。
|
145
|
+
|
146
|
+
マネージド スレッドのキャンセル
|
147
|
+
https://docs.microsoft.com/ja-jp/dotnet/standard/threading/cancellation-in-managed-threads
|
148
|
+
|
149
|
+
それに書いてありますが、キャンセル処理を実装するための一般的なパターンは以下の通りだそうです。
|
150
|
+
|
151
|
+
0. CancellationTokenSource クラスのインスタンスを作成する。
|
152
|
+
0. CancellationTokenSource.Token プロパティで CancellationToken を取得し、キャンセルをリッスンするタスクに渡す。
|
153
|
+
0. タスクにはキャンセル通知を適切に処置するコードを実装しておく。
|
154
|
+
0. CancellationTokenSource.Cancel メソッドを呼び出し、リッスンしているタスクにキャンセルを通知する。
|
155
|
+
0. キャンセル通知を受けたタスクは、あらかじめ実装されているコードに従ってキャンセル処置を行う。
|
156
|
+
|
157
|
+
|
158
|
+
タスクがキャンセルの通知を受けとるには、(1) ポーリング、(2) コールバックの登録、(3) 待機ハンドルの待機という方法があるそうです。上のコード例は (1) を使っています。
|