public IActionResult Question5AnswerSynchronous(Question5Model q5Model) { DateTime startTime = DateTime.Now; Question5Logics q5Logics = new Question5Logics(q5Model.question); q5Model.question5Results.Add( new Question5Result(Thread.CurrentThread.ManagedThreadId.ToString() , q5Logics.getAnswerFromLoop() , "Loop")); q5Model.question5Results.Add( new Question5Result(Thread.CurrentThread.ManagedThreadId.ToString() , q5Logics.getAnswerFromRecursive() , "Recursive")); DateTime endTime = DateTime.Now; TimeSpan span = endTime - startTime; int ms = (int)span.TotalMilliseconds; q5Model.duration = ms; return(View("Question5", q5Model)); }
public async Task <IActionResult> Question5AnswerAsynchronous(Question5Model q5Model) { DateTime startTime = DateTime.Now; Question5Logics q5Logics = new Question5Logics(q5Model.question); var taskLoop = new TaskCompletionSource <UInt64>(); var tcsLoop = new TaskCompletionSource <UInt64>(); ThreadPool.QueueUserWorkItem(_ => { try { UInt64 result = q5Logics.getAnswerFromLoop(); tcsLoop.SetResult(result); } catch (Exception exc) { tcsLoop.SetException(exc); } }); var taskRec = new TaskCompletionSource <UInt64>(); var tcsRec = new TaskCompletionSource <UInt64>(); ThreadPool.QueueUserWorkItem(_ => { try { UInt64 result = q5Logics.getAnswerFromLoop(); tcsRec.SetResult(result); } catch (Exception exc) { tcsRec.SetException(exc); } }); UInt64 ansLoop = await tcsLoop.Task; UInt64 ansRec = await tcsRec.Task; q5Model.question5Results.Add( new Question5Result(Thread.CurrentThread.ManagedThreadId.ToString() , ansLoop , "Loop")); q5Model.question5Results.Add( new Question5Result(Thread.CurrentThread.ManagedThreadId.ToString() , ansRec , "Recursive")); DateTime endTime = DateTime.Now; TimeSpan span = endTime - startTime; int ms = (int)span.TotalMilliseconds; q5Model.duration = ms; return(View("Question5", q5Model)); }
public IActionResult Question5AnswerThread(Question5Model q5Model) { DateTime startTime = DateTime.Now; Question5Logics q5Logics = new Question5Logics(q5Model.question); ThreadStart threadLoopDel = delegate { q5Model.question5Results.Add( new Question5Result(Thread.CurrentThread.ManagedThreadId.ToString() , q5Logics.getAnswerFromLoop() , "Loop")); }; Thread threadLoop = new Thread(threadLoopDel); threadLoop.Start(); ThreadStart threadRecursiveDel = delegate { q5Model.question5Results.Add( new Question5Result(Thread.CurrentThread.ManagedThreadId.ToString() , q5Logics.getAnswerFromRecursive() , "Recursive")); }; Thread threadRecursive = new Thread(threadRecursiveDel); threadRecursive.Start(); while (threadRecursive.ThreadState != ThreadState.Stopped || threadLoop.ThreadState != ThreadState.Stopped) { } DateTime endTime = DateTime.Now; TimeSpan span = endTime - startTime; int ms = (int)span.TotalMilliseconds; q5Model.duration = ms; return(View("Question5", q5Model)); }