private async Task <TimeSpan> MainTest(Action <int, ConcurrentExecutorSlim, TaskCompletionSource <DateTime> > action) { var concurrentExecutor = new ConcurrentExecutorSlim(); 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 async void TestActionExecute(int timeout, ConcurrentExecutorSlim concurrentExecutorSlim, TaskCompletionSource <DateTime> taskCompletionSource) { await concurrentExecutorSlim.Execute(timeout, () => { Thread.Sleep(timeout); taskCompletionSource.SetResult(DateTime.Now); }); }