我可以使用parallel.ForEach来调用不同的函数吗?

MrM*_*MrM 4 .net c# asp.net parallel-processing multithreading

我有一个运行的foreach循环.我正在研究并行功能.是否可以转换以下代码以使用并行编程?

int result ;
int counter;
foreach(DataRow dr in ds.Tables[0].Rows) {
    switch(dr["Gender"].ToString()) {
        case "Male":
            result = functionMale(dr["Gender"].ToString());
            counter += result;
            break;
        case "Female":
            result = functionFemale(dr["Gender"].ToString());
            counter += result;
            break;
        default:
            result = functionUnkown(dr["Gender"].ToString());
            counter += result;
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

根据我的观察,我到目前为止只有以下内容.

Parallel.ForEach(ds.Tables[0].AsEnumerable(), dr => {
    var result = functionMale(dr["Gender"].ToString();
});
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

use*_*116 5

你可以使用AsParallelSum:

Func<string, int> calculateGender =
    gender =>
    {
        // nb: I don't know why you pass the gender to the method, but
        // I've left your intent as-is
        switch (gender)
        {
            case "Male":   return functionMale(gender);
            case "Female": return functionFemale(gender);
            default:       return functionUnknown(gender);
        }
    };

int counter = ds.Tables[0].AsEnumerable()
                          .AsParallel()
                          .Sum(dr => calculateGender(dr["Gender"].ToString()));
Run Code Online (Sandbox Code Playgroud)