J'ai une application .NET qui traite environ 300 000 enregistrements dans une importation par lot, et cela prend quelques secondes par enregistrement, donc je voudrais paralléliser cela. Dans le code suivant, quelle est la différence entre ProcessWithAnsycDelegates()
et ProcessWithThreadPool()
?Utilisez des délégués asynchrones ou ThreadPool.QueueUserWorkItem pour un parallélisme massif?
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;
}
}
Quelles parties ne sont pas applicables? – bzlm