提问者:小点点

使用并行foreach循环传递对象


我需要修改下面的代码,以使用parallel.foreach循环与常规foreach循环。

我遇到的问题是将对象传递给foreach循环。我刚开始使用parallel.foreach循环-有没有人对此有一些信息?

当前代码

var objSellerPeramaterValuesList = objInboundDB.GetMwsRequestParameters();

foreach (SellerModel objSellerPeramaterValues in objSellerPeramaterValuesList)
{
    Method.InsertProcessLog(new ProcessLogModel
                                {
                                    sProcessName = sProcessName,
                                    sSellerID = objSellerPeramaterValues.sSellerId,
                                    sStartDate = sProcessStartDate,
                                    sEndDate = sProcessEndDate,
                                    sStatus = "STARTED",
                                    sMessage = "Started Process For ID .. " + objSellerPeramaterValues.sSellerId
                                });

    // more code here......
}

问题是列表将包含3000+项,循环将循环每一项,我需要并行地运行它们。

因此,我想使用parallel.foreach函数,但我无法通过传递对象来使其工作。


共1个答案

匿名用户

看起来您应该能够做到:

Parallel.ForEach(objSellerPeramaterValuesList, objSellerPeramaterValues =>
{
    /* exact same code */
    // Method.InsertProcessLog(...) // etc
});

但是,您必须非常注意排序和并发性--如果您正在做的任何事情(包括您正在使用的组件/工具)不是/不是被设计成线程安全的:这是坏事。