c# - 并行化作业的更好方法

标签 c# lambda func

现在,我对 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/

相关文章:

c# - Entity Framework : Model Contain A list(navigational properties) of three items of type= itself , 给出错误。 (可能是外键映射错误)

python - 了解 pystache 中的 lambda

c# - 如何在 C# 中包装具有未知数量和类型的参数的 Func<T1...Tn> ?

ios - 从其他 VC 调用函数

c# - Func<T> 没有参数

c# - 使用拖动装饰器进行拖放

c# - 如何设置值如果组合框不更改 WPF MVVM 模式中的值

node.js - Lambda 根据 zip 的创建方式抛出错误

c# - UI测试框架+持续集成?

java - lambda 表达式如何与谓词一起使用?