.NET 4.0 Parallel Extensionsを使用して、長時間実行されるプロセスの結果を優先度の低いスレッドでシリアルに処理する最良の方法を知りたいです。
実行と結果の両方を提供する次のクラスがあります。
public class Step
{
public string Name { get; set; }
public TimeSpan Duration { get; set; }
public bool Completed { get; set; }
public void Execute()
{
DateTime before = DateTime.Now;
RemotedService.DoSomeStuff();
Duration = DateTime.Now - before;
Completed = true;
}
}
これらのステップを処理し、処理後に順番にファイルに保存するにはどうすればよいですか? RemotedService.DoSomeStuff()
サーバーからの応答を待っている間にファイルに保存したいと思います。
ファイルへの書き込みは次のようになります。
using (StreamWriter w = File.AppendText("myFile.txt"))
{
var completedStep = completedSteps.Dequeue();
w.WriteLine(string.Format("Completed {0} with result: {1} and duration {2}",
completedStep.Name,
completedStep.Completed,
completedStep.Duration));
}
頭に浮かぶ 1 つのオプションは、それらを に追加し、それらを処理Queue
するTimer
を用意することです。ただし、これはリモート呼び出しのダウンタイムを利用していません。
頭に浮かぶ別のオプションは、System.Threading.Tasks.Task
perを使用して各結果をファイルに非同期に書き込むことですStep
が、それは結果が順番に保存されることを保証するものではなく、ファイルへの書き込みで競合が発生する可能性もあります。