Я хочу знать, каков наилучший способ последовательной обработки результатов длительного процесса, но в потоке с низким приоритетом, с использованием .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));
}
Один из возможных вариантовна ум стоит добавить их к Queue
и иметь Timer
, который их обрабатывает.Но это не использует время простоя удаленных вызовов.
Другой вариант, который приходит на ум, - это асинхронная запись каждого результата в файл с использованием System.Threading.Tasks.Task
на Step
, но это не так.Гарантируют, что они будут сохранены по порядку, а также могут привести к конфликту при записи в файл.