teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ハイパーリンク設定

2021/04/15 00:53

投稿

退会済みユーザー
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

追記

2021/04/15 00:53

投稿

退会済みユーザー
answer CHANGED
@@ -137,4 +137,22 @@
137
137
 
138
138
  実行結果は以下のようになります。[RunProcTask 起動]ボタンクリックで同期版のメソッド RunProcTask を Task.Run で起動し、そのボタンのハンドラに追加した this.cts.CancelAfter(5000); により 5 秒後にキャンセルされたところです。
139
139
 
140
- ![イメージ説明](cdd848dc151e1ac639985eacef475ce4.jpeg)
140
+ ![イメージ説明](cdd848dc151e1ac639985eacef475ce4.jpeg)
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) を使っています。