private static async Task InvokeBatchingHandler() { var timer = new MyTimer(1000); var batchProcessor = new BatchProcessor(new BatchConverter(), new Batcher(timer), 5, 10); int rangeTo = 1008; var handlers = Enumerable.Range(1, rangeTo) .Select(x => new { Number = x, CalculateTask = new BatchingHandler(batchProcessor).Handle(x) }) .ToList(); // Throw some more work, fire and forget //await Task.Run(async () => //{ // Enumerable.Range(rangeTo+1, 10000) // .Select(x => new {Number = x, CalculateTask = new BatchingHandler(batchProcessor).Handle(x)}) // //.Select(async x => Console.WriteLine(await x.CalculateTask)) // .Select(async x => await x.CalculateTask) // .ToList(); //}); foreach (var h in handlers) { Result hexResult = null; try { hexResult = await h.CalculateTask; } catch (ItemFailedException ex) { //Console.WriteLine("ItemFailedException:" + ex); } catch (Exception ex) { Console.WriteLine("Unexpected exception:" + ex); } Console.WriteLine($"{h.Number}: {hexResult?.Hex ?? "This item failed."}"); } }
public BatchingHandler(BatchProcessor batchProcessor) { this.batchProcessor = batchProcessor; }