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)))); }
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); } } }
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)); }
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); }
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}"); } }
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)); } }
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(); }
public void Reset() { FormattedConsole.WriteLine($"Job Scheduler {Thread.CurrentThread.ManagedThreadId} -Work Arrived!!"); Interlocked.Exchange(ref _count, -1); }
public IEnumerable <BatchedWorkItem> CreateStartupWorkItems(IWorkBatchFactory workBatchFactory, CancellationToken cancellationToken) { FormattedConsole.WriteLine($"Producer {ProducerId} - Startup"); return(GetWorkItems(workBatchFactory, true)); }
public void DoFinally(WorkItemResult result, CancellationToken cancellationToken) { FormattedConsole.WriteLine($"Consumer {Thread.CurrentThread.ManagedThreadId} finalized batch in work item {Id}"); }