Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
TreeNode変更でTaskキャンセル
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30498#CommentId84001
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
るきお
 (社会人)
投稿日時
2020/5/28 21:41:15
実行中のタスクと、タスクの外側で _cts を共有しているところに難しさがあって、キャンセル操作時に _cts の New が先に実行されてしますと、タスク内で _cts を参照するところで、タスク開始時の _cts とは違うものを参照することになってしまいます。
それで、Newするまでの間に少し猶予 Task.Delay(20).Wait() を入れてみました。
ご認識の通り時間で指定しているところが良くないところなんですよね。
試してはいませんが、タスク側で処理が終わった時点でフラグをたてて、フラグが立っているのを確認してから_cts を New するなど時間に依存しないロジックが書ければそちらの方が良いと思います。
とりあえず Task.Delay(20).Wait() の 20 を大きくするだけでも安定性は上がるので、この処理のクリティカル具合によってはこれでも妥協できるかもしれませんが・・・。