मैं एक पाश में चल रहा हूँ और निम्नलिखित तरीके से कार्य को बंद लात चाहते हैं लगता है:स्टॉपवॉच, सभी कार्य भर में additive हो सिर्फ कार्य अंतराल को मापने के लिए
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);
}
मेरी DoSomething()
विधि के भीतर, मैं एक टाइमर है: जब मैं myMsg
के ElaspedMilliseconds की मेरी सूची के माध्यम से पुनरावृति
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);
}
पूरी तरह से additive हो रहा है - पहले एक पर ElaspedMilliseconds 300 हो सकता है, लेकिन पिछले एक 50000 (50 सेकंड) हो सकता है - जो वास्तव में एक है पंपप्लेमेट टाइम पूरी चीज चलाने के लिए लेता है (जैसा कि एक और टाइमर द्वारा मापा जाता है)।
अपडेट किया गया [मेरा उत्तर] (http://stackoverflow.com/a/16259019/200449)। यह केवल भ्रामक रूप से additive दिखता है क्योंकि ElapsedMilliseconds मान हमेशा बढ़ते क्रम में आउटपुट होते हैं - कार्यों को पूरा करने के क्रम में (कार्य की अवधि के क्रम में) जिसमें वह आदेश नहीं है जिसमें कार्य लॉन्च किए गए थे –