Task
を連鎖して、連鎖を開始します。私は空のメソッドが() => { }
最初に実行した好きではないの内側に連鎖する適切な方法
var taskOrig = new Task(() => { });
var task = taskOrig;
foreach (var msg in messages)
{
task=task.ContinueWith(t => Console.WriteLine(msg));
}
taskOrig.Start();
すべてが少し完璧主義者を除いて正常に動作します: このコードは、ちょうど私の質問を説明することです。
これを避ける方法はありますか?
私は理解していますそれはパフォーマンスにほとんど影響を与えません(あなたが本当に頻繁にしない限り)。私の場合はパフォーマンスが重要なので、すべての反復でタスクが存在するかどうかを確認することはそれを行う方法ではありません。
Task task = null;
foreach (var msg in messages)
{
if (task == null)
task = new Task(() => Console.WriteLine(msg))
else
task = task.ContinueWith(t => Console.WriteLine(msg));
}
task.Start();
「パフォーマンス事項:使用例は次のようになり
:
別のオプションは、このようなものを使用することですそれを行う方法」:実際にタスクを実行するのに比べると、無視できる時間です。パフォーマンスヒットを実際に測定していない限り、明らかに早すぎる最適化のケースです。 –
@ThomasLevesqueあなたはおそらく正しいでしょう。私はたぶん私がタスクを作ってAPIを作っていないかもしれないと思った。後でパフォーマンスを測定する機会があります。 – Anri
TPL DataFlowの興味深いのは – sll