예제 #1
0
        private static IEnumerable <BatchedWorkItem> GetWorkItems(IReadOnlyCollection <Uri> fileLocations, IWorkBatchFactory workBatchFactory, string batchId = null)
        {
            var batch = workBatchFactory.Create(fileLocations.Count, new BlobWatcherWorkBatch(batchId, ProcessResults));

            FormattedConsole.WriteLine($"Created batch {batch.Id} with {fileLocations.Count} blobs");

            return(fileLocations
                   .Select(uri => new BatchedWorkItem(batch, new BlobWatcherWorkItem(uri.AbsoluteUri, batch))));
        }
예제 #2
0
        public IEnumerable <BatchedWorkItem> CreateWorkItems(IWorkBatchFactory workBatchFactory, CancellationToken cancellationToken)
        {
            FormattedConsole.WriteLine($"Producer {ProducerId} - Checking for work...");

            while (_workAvailableRepo.WorkAvailable())
            {
                foreach (var workItem in GetWorkItems(workBatchFactory))
                {
                    yield return(workItem);
                }
            }
        }
예제 #3
0
        public WorkItemResult Do(CancellationToken cancellationToken)
        {
            FormattedConsole.WriteLine($"Consumer {Thread.CurrentThread.ManagedThreadId} consuming {Id}");

            var rand      = new Random(Seed);
            var timeTaken = rand.Next(0, 9);

            cancellationToken.WaitHandle.WaitOne(timeTaken * 1000);

            FormattedConsole.WriteLine($"Consumer {Thread.CurrentThread.ManagedThreadId} consumed {Id}, time taken: {timeTaken}");

            return(new WorkItemResult(WorkStatus.Successful));
        }
예제 #4
0
        private IEnumerable <BatchedWorkItem> GetWorkItems(IWorkBatchFactory workBatchFactory, bool startup = false)
        {
            var workBatch = workBatchFactory.Create(3, new DummyWorkBatch(), startup: startup);

            var workItems = new List <BatchedWorkItem>();

            for (var i = 0; i < 3; i++)
            {
                workItems.Add(new BatchedWorkItem(workBatch, new DummyWorkItem(_rand.Next(0, 100).ToString())));
            }

            FormattedConsole.WriteLine($"Producer {ProducerId} has created {workItems[0].Id}, {workItems[1].Id}, {workItems[2].Id}");

            return(workItems);
        }
예제 #5
0
        public void DoFinally(WorkItemResult result, CancellationToken cancellationToken)
        {
            try
            {
                FormattedConsole.WriteLine($"{Id} dofinally started");

                _processResults(result, int.Parse(Id));

                FormattedConsole.WriteLine($"Batch {Id} done");
            }
            catch (Exception e)
            {
                FormattedConsole.WriteLine($"Batch {Id} : exception in dofinally, {e}");
            }
        }
예제 #6
0
        public WorkItemResult Do(CancellationToken cancellationToken)
        {
            try
            {
                var storageAccount = CloudStorageAccount.Parse(
                    ConfigurationManager.AppSettings["Azure.Storage.ConnectionString"]);
                var blockBlob = GetBlobReference(storageAccount, Id);

                var fileName = Path.GetFileName(blockBlob.Name);
                blockBlob.DownloadToFile(fileName, FileMode.Create);

                return(new WorkItemResult(WorkStatus.Successful, Id));
            }
            catch (Exception e)
            {
                FormattedConsole.WriteLine($"Work Item {Id} of {_batch.Id} failed, exception {e.Message}");
                return(new WorkItemResult(WorkStatus.Failed, Id));
            }
        }
예제 #7
0
        private static void Main(string[] args)
        {
            ServicePointManager.DefaultConnectionLimit = 1000;

            var tokenSource = new CancellationTokenSource();

            WorkerPoolExample.StartPool(
                bool.Parse(args[0]),
                new TimeSpan(0, 0, 0, int.Parse(args[1])),
                new TimeSpan(0, 0, 0, int.Parse(args[2])),
                int.Parse(args[3]),
                int.Parse(args[4]),
                tokenSource.Token);

            FormattedConsole.WriteLine("Pool started correctly!");

            while (Console.ReadKey().KeyChar != 'q')
            {
            }

            tokenSource.Cancel();
        }
예제 #8
0
 public void Reset()
 {
     FormattedConsole.WriteLine($"Job Scheduler {Thread.CurrentThread.ManagedThreadId} -Work Arrived!!");
     Interlocked.Exchange(ref _count, -1);
 }
예제 #9
0
 public IEnumerable <BatchedWorkItem> CreateStartupWorkItems(IWorkBatchFactory workBatchFactory, CancellationToken cancellationToken)
 {
     FormattedConsole.WriteLine($"Producer {ProducerId} - Startup");
     return(GetWorkItems(workBatchFactory, true));
 }
예제 #10
0
 public void DoFinally(WorkItemResult result, CancellationToken cancellationToken)
 {
     FormattedConsole.WriteLine($"Consumer {Thread.CurrentThread.ManagedThreadId} finalized batch in work item {Id}");
 }