Sono in esecuzione in un ciclo e dando il via le attività nel modo seguente:Cronometro in una Task sembra essere additivo in tutti i compiti, vogliono misurare l'intervallo solo compito
var iResult = new List<Task>();
foreach(var i in myCollection)
{
var task = Task.Factory.StartNew(() =>
DoSomething(), TaskCreationOptions.LongRunning);
task.ContinueWith(m => myResponseHandler(m.Result));
iResult.Add(task);
}
Entro il mio metodo DoSomething()
, ho avere un timer:
public static myMsg DoSomething()
{
var timer = System.Diagnostics.Stopwatch.StartNew();
DoLongRunningTask(); //If it matters this hits a REST endpoint (https)
timer.Stop();
return new myMsg(timer.ElaspedMilliseconds);
}
Quando ho scorrere la mia lista di myMsg
s' i ElaspedMilliseconds sembra essere completamente additiva - le ElaspedMilliseconds sul primo potrebbe essere 300, ma l'ultima potrebbe essere 50000 (50 secondi) - che è in realtà l'a tempo approssimativo per l'esecuzione dell'intera operazione (misurata da un altro timer).
Aggiornato [risposta] (http://stackoverflow.com/a/16259019/200449). Sembra solo additivo perché i valori di ElapsedMilliseconds vengono sempre emessi in ordine crescente SOLO - in ordine di completamento delle attività (in ordine di durata dell'attività) che non è l'ordine in cui sono state avviate le attività –