private async Task DoWork_Duration(TimeSpan duration, Stopwatch sw, ConcurrentQueue <WorkerThreadResult> results, CancellationToken cancellationToken, ManualResetEventSlim resetEvent, int workerIndex) { IWorkerJob job; var workerThreadResult = new WorkerThreadResult(); try { job = await _workerJob.Init(workerIndex, workerThreadResult); } catch (Exception ex) { workerThreadResult.AddError((int)sw.ElapsedMilliseconds / 1000, 0, 0, false, ex); results.Enqueue(workerThreadResult); resetEvent.Set(); return; } while (!cancellationToken.IsCancellationRequested && duration.TotalMilliseconds > sw.Elapsed.TotalMilliseconds) { try { await job.DoWorkAsync(); } catch (Exception ex) { workerThreadResult.AddError((int)sw.ElapsedMilliseconds / 1000, 0, 0, false, ex); } } results.Enqueue(job.GetResults()); resetEvent.Set(); }
private async Task DoWork_Count(int count, ConcurrentQueue <WorkerThreadResult> results, CancellationToken cancellationToken, ManualResetEventSlim resetEvent, int workerIndex) { var workerThreadResult = new WorkerThreadResult(); var job = await _workerJob.Init(workerIndex, workerThreadResult); for (var i = 0; i < count && !cancellationToken.IsCancellationRequested; i++) { await job.DoWorkAsync(); } results.Enqueue(job.GetResults()); resetEvent.Set(); }