タスクには.Cancel
と.Wait
の問題があります。それは多くの記憶と時間が必要です。C#タスク.Cancelには多くのメモリが必要で、スレッド内の.Abortと同じではありません。
タスク:私はスレッドを中止するために.Abort
を使用するC#のスレッドで
using (CancellationTokenSource cancelSource = new CancellationTokenSource())
{
CancelEventArgs args = new CancelEventArgs(false);
Task task = Task.Factory.StartNew(() =>
{
try
{
action(args);
}
catch (Exception ex)
{
exception = ex;
}
}, cancelSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Current);
bool success = task.Wait(maxRuntime);
if (!success)
{
cancelSource.Cancel();
return false;
}
}
。ここでは私が使用している仕事で.Cancel.
しかし、私は.Cancel
が多くのメモリと時間を要し、スレッド内で.Abort
と同じではないと思います。
bool success = task.Wait(maxRuntime);
if (!success)
{
cancelSource.Cancel();
return false;
}
スレッドの例を使用している場合はどのようにメモリを減らすことができます:タスクをキャンセル
Thread workerThread = new Thread(threadStart);
workerThread.Start();
bool finished = workerThread.Join(timeout);
if (!finished)
workerThread.Abort();
return finished;
あなたはあなたが「考える」と言った。両方の方法のメモリ/時間消費量を測定しましたか? – Alex
はい私はしました。そして、私はなぜタスクをキャンセルするとあまりにも多くのメモリを取るのか分かりません。私が問題があるかどうかわからない.Waitまたは.Cancel ... – senzacionale
タスクがキャンセルされた場合はどこにでもチェックが表示されない。だから、取り消しを無視して完了まで走ります。回答のための – CodesInChaos