2016-10-12 3 views
1

を開始するために多くの時間を要しますキャンセル。すべてがここで私にとってうまくいくようです。Task.Runは私がように定義〜40実行中のタスクを、持っている私のプログラムではタスク

それから私は、ボタンのクリックでタスク(無限ではない)を開始する必要があります。

private void ExecuteRepairCommand(object o) { 
     Task.Run(() => { 
     ... 
     }); 
    } 

それは、この新しいタスクを開始するために〜40分の30秒かかります。 スレッドがすべて正常に動作する場合、スレッドは即座に起動します。どうして?何が原因なの?

+0

私はそれが非同期のものであるか不足しているかもしれないと思いますが、30-40秒後に起動するとは思われません。たぶん、ExecuteRepairCommand Asyncを試してから、タスクを待ってください。 –

+0

タスクの作成時に 'TaskCreationOptions.LongRunning'フラグを使います。 –

+0

@SriramSakthivelうわーありがとう!私はそれを正しい印をつけることができるように答えを投稿することはできますか? – rmbq

答えて

6

デフォルトでは、タスクはThreadPoolにスケジュールされています。多くのタスクをスケジュールすると、ThreadPoolは新しいスレッドを作成しません。新しいスレッドを作成する前に(あるヒューリスティックに基づいて)いつか待つことになります。だから、あなたはあなたの仕事の開始に遅れがあるのに気付きます。 I've explained it earlier here

に戻るあなたのタスクが長時間実行されている場合は、実際にLongRunningフラグを使用することを検討する必要があります。タスクスケジューラに新しいスレッドを与えるよう指示します。タスクは他のタスクに影響を与えることなく、独立して長時間実行できます。

Task.Factory.StartNew(() => 
{ 
    ... 
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default); 
関連する問題