Question

kukku59 on Thu, 04 Apr 2013 11:20:39


いつもお世話になっております。

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

 


Sponsored