现在,我对 Lambda、Funcs、Delegates、Actions 等仍然有点陌生,但我正在尝试找到一种更好的方法来并行化依赖于数据库操作的分配。换句话说,我需要一次性从数据库中提取大量数据,并且我想以并行方式而不是串行方式进行操作。
到目前为止我正在使用 List<Func<object>>
与 Parallel.Foreach()
组合,但我忍不住想知道是否有更优雅的方法来做到这一点。我尝试过 Parallel.Invoke,但无法在 Lambda 表达式上调用 Invoke()(也许没有 func 文字?)。显然,必须先将其分配给 Func,然后才能调用 Invoke(),然后将其视为 Action。
这就是我到目前为止所拥有的。
List<Func<Object>> Assignments = new List<Func<object>>();
Assignments.Add( () => lookups.Acknowledgements = DBRepository.GetAll<Acknowledgement>());
Assignments.Add( () => lookups.AcknowledgementDetails = DBRepository.GetAll<AcknowledgementDetail>());
Assignments.Add( () => lookups.AcknowledgementRadioButtons = DBRepository.GetAll<AcknowledgementRadioButtonSection>());
Assignments.Add( () => lookups.AcknowledgementRadionButtonItems = DBRepository.GetAll<AcknowledgementRadioButtonSectionItem>());
Assignments.Add( () => lookups.AcknowledgementTextBoxes = DBRepository.GetAll<AcknowledgementTextBoxSection>());
Assignments.Add( () => lookups.MarketingPages = DBRepository.GetAll<MarketingPage>());
Assignments.Add( () => lookups.MarketingPageDetails = DBRepository.GetAll<MarketingPage_Detail>());
// and many many more...
Parallel.ForEach(Assignments, (assignement) =>
{
assignement.Invoke();
});
是否有更漂亮、更优雅或更好的方法来并行化一般赋值操作?
最佳答案
您仍然可以使用Parallel.Invoke
来保存一些行:
Parallel.Invoke(
() => lookups.Acknowledgements = DBRepository.GetAll<Acknowledgement>(),
() => lookups.AcknowledgementDetails = DBRepository.GetAll<AcknowledgementDetail>()
);
关于c# - 并行化作业的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42961188/