いつもお世話になっております。
TPLのタスクの挙動について、質問があります。
下記のように、CancellationTokenがfalseとして、タスクを実行しているのですが、タスクがキャンセルされてしまうことがあります。
==========================================
private static int MAX_PARALLEL = int.Parse(ConfigurationManager.AppSettings["Task.MaxParallel"]);
private static int MAX_QUEUE_WAIT = int.Parse(ConfigurationManager.AppSettings["Task.MaxQueueWait"]);
private static readonly LimitedConcurrencyLevelTaskScheduler Lcts =
new LimitedConcurrencyLevelTaskScheduler(MAX_PARALLEL, MAX_QUEUE_WAIT);
// メイン処理(最大並列処理数および最大待機キュー数を指定)
TaskFactory factory = new TaskFactory(Lcts);
CancellationToken cancelToken = new CancellationToken(false);
Task<Object> task = factory.StartNew<Object>(() => run(request), cancelToken);
task.ContinueWith(
task1 => runComplete(task1),
TaskContinuationOptions.OnlyOnRanToCompletion);
// 処理成功時の事後処理
task.ContinueWith(
task1 => runFault(task1),
TaskContinuationOptions.OnlyOnFaulted);
// 処理失敗時の事後処理
task.ContinueWith(
task1 => runCancel(task1),
TaskContinuationOptions.OnlyOnCanceled);
// 処理中断時の事後処理
// タイムアウト時間を設定してWait(ただしタイムアウトしても処理は裏で継続させる)
bool isSuccess = task.Wait(request.Timeout, cancelToken);
==========================================
明示的にタスクのキャンセルを行わないのにもかかわらず、タスクがキャンセルされてしまう条件について
ご存知の方がいらっしゃいましたら、ご教授いただけると幸いです。よろしくお願いいたします。
環境は以下の通りです。
Visual Studio 2010、.Net Framework 4.0