private async Task <TimeSpan> MainTest(Action <int, ConcurrentExecutor, TaskCompletionSource <DateTime> > action) { var concurrentExecutor = new ConcurrentExecutor(); var taskCompletionSource1 = new TaskCompletionSource <DateTime>(); var taskCompletionSource2 = new TaskCompletionSource <DateTime>(); new Thread(o => action(Timeout1, concurrentExecutor, (TaskCompletionSource <DateTime>)o)).Start(taskCompletionSource1); new Thread(o => action(_timeout2, concurrentExecutor, (TaskCompletionSource <DateTime>)o)).Start(taskCompletionSource2); var dt1 = await taskCompletionSource1.Task; var dt2 = await taskCompletionSource2.Task; TimeSpan offset; if (dt1 > dt2) { offset = dt1 - dt2; } else { offset = dt2 - dt1; } return(offset); }
private void TestActionExecute(int timeout, ConcurrentExecutor concurrentExecutor, TaskCompletionSource <DateTime> taskCompletionSource) { concurrentExecutor.Execute(timeout, () => { Thread.Sleep(timeout); taskCompletionSource.SetResult(DateTime.Now); }); }
private void TestFuncExecute(int timeout, ConcurrentExecutor concurrentExecutor, TaskCompletionSource <DateTime> taskCompletionSource) { var dt = concurrentExecutor.Execute(timeout, () => { Thread.Sleep(timeout); return(DateTime.Now); }); taskCompletionSource.SetResult(dt); }