I have a .NET application that processes around 300,000 records in a batch import, and it takes a few seconds per record so I would like to parallelize this. In the following code, what’s the difference between ProcessWithAnsycDelegates() and ProcessWithThreadPool()?
public class ResultNotification { public EventHandler event Success; public EventHandler event Fail; internal void Notify(bool sucess) {if (success) Success(); else Fail();} } public static class Processor { public ResultNotification ProcessWithAnsycDelegates(Record record) { var r = new ResultNotification(); Func<Record,bool> processRecord=new RecordProcessor().ProcessRecord; processRecord.BeginInvoke ( record ,ar => result.Notify(processRecord.EndInvoke(ar)) ,null); return r; } public ResultNotification ProcessWithThreadPool(Record r) { var r = new ResultNotification(); var rp = new RecordProcessor(); ThreadPool.QueueWorkUserItem(_=>result.Notify(rp.ProcessRecord(r))); return r; } }
In this case, not a lot as they both use the threadpool under the hood. I’d say that the
QueueUserWorkItem()is easier to read and see what’s going on vs.BeginInvoke().This link may help. It’s older information, but still mostly applicable: https://jonskeet.uk/csharp/threads/threadpool.html