Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }