C# 并行分配任务的更好方法

C# 并行分配任务的更好方法,c#,lambda,func,C#,Lambda,Func,现在,我对Lambdas、Funcs、委托、操作等还是有点陌生,但我正在尝试找到一种更好的方法来并行化依赖于数据库操作的分配。换句话说,我有很多数据要一次从数据库中提取,我想并行地做,而不是串行地做 到目前为止,我正在与Parallel.Foreach()组合使用列表,但我不禁想知道是否有更优雅的方法来实现这一点。我尝试了Parallel.Invoke,但无法对Lambda表达式调用Invoke()(可能没有func literal?)。显然,在调用Invoke()并将其视为操作之前,必须先将其

现在,我对Lambdas、Funcs、委托、操作等还是有点陌生,但我正在尝试找到一种更好的方法来并行化依赖于数据库操作的分配。换句话说,我有很多数据要一次从数据库中提取,我想并行地做,而不是串行地做

到目前为止,我正在与
Parallel.Foreach()
组合使用
列表
,但我不禁想知道是否有更优雅的方法来实现这一点。我尝试了Parallel.Invoke,但无法对Lambda表达式调用Invoke()(可能没有func literal?)。显然,在调用Invoke()并将其视为操作之前,必须先将其分配给Func

这就是我目前所拥有的

            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();

            });
列表分配=新列表();
Assignments.Add(()=>lookups.ackknowledges=DBRepository.GetAll());
Add(()=>lookups.ackknowledgementDetails=DBRepository.GetAll());
Add(()=>lookups.ackknowledgementTradioButtons=DBRepository.GetAll());
添加(()=>lookups.AcknowledgementTraditionButtonItems=DBRepository.GetAll());
Add(()=>lookups.ackknowledgementtextboxs=DBRepository.GetAll());
添加(()=>lookups.MarketingPages=DBRepository.GetAll());
添加(()=>lookups.MarketingPageDetails=DBRepository.GetAll());
//还有更多。。。
Parallel.ForEach(赋值,(赋值)=>
{
assignment.Invoke();
});

一般来说,有没有更漂亮、更优雅或更好的方法来并行分配操作?

您仍然可以使用
Parallel。调用
来保存一些行:

Parallel.Invoke(
    () => lookups.Acknowledgements = DBRepository.GetAll<Acknowledgement>(),
    () => lookups.AcknowledgementDetails = DBRepository.GetAll<AcknowledgementDetail>()
);
Parallel.Invoke(
()=>lookups.Acknowledges=DBRepository.GetAll(),
()=>lookups.AcknowledgementDetails=DBRepository.GetAll()
);

非常感谢,您的Parallel.Invoke()代码可以正常工作。显然,我之前的尝试没有完全正确地理解语法。