并行化分配的更好方法
Better way to Parallelize assignments
现在,我对 Lambdas、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>()
);
现在,我对 Lambdas、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>()
);