Parallel.ForEach mit verschiedenen Datentypen



  • Hallo,
    ich habe eine funktionierende Foreach Schleife:

    foreach (PluginInterfaces.Point point in ls[k])
    

    ls ist vom Datentyp "Sample".
    und möchte die Parallel gestalten:

    Parallel.ForEach(ls[k],PluginInterfaces.Point point=>
    

    Fehler:"Point" ist "Typ" und im angegeben Kontext nicht gültig.
    Weil ls ein eigener Datentyp "Sample" ist erwartet er jetzt den gleichen Datentyp, oder?

    Ich habe folgende Variationen schon probiert, leider ohne Erfolg:

    Parallel.ForEach(ls[k],point=>
    

    Die Typargumente der System.Threading.Tasks.Parallel.ForEach<TSource>(System.Collections.Concurrent.OrderablePartitioner<TSource>, System.Action<TSource,System.Threading.Tasks.ParallelLoopState,long>)-Methode können nicht per Rückschluss aus der Syntax abgeleitet werden. Geben Sie die Typargumente explizit an.

    Parallel.ForEach<PluginInterfaces.Point>(ls[k],point=>
    

    Fehler: Sample kann nicht in Point konvertiert werden

    Parallel.ForEach<Sample,PluginInterfaces.Point>(ls[k],point=>
    

    Fehler: nimmt keine 2 Argumente an

    Hat jemand einen Tipp?



  • Wenn das
    foreach (PluginInterfaces.Point point in ls[k])
    funktioniert, sollte auch das
    Parallel.ForEach(ls[k],point=>
    seinen Dienst tun.

    Was ist ls[k]?
    Zeig mehr Code, am besten ein kompilierbares Minimalbeispiel



  • Ich hab die darüberliegende For Schleife nun parallelisiert(mann soll wenn möglich immer die äußeren Schleifen nehmen, damit nicht soviele Threads erstellt und gelöscht werden) Trotzdem wollte ich das gerne nochmal wissen wie das mit der foreach schleife geht. das kann doch eigentlich nicht so schwer sein.
    ls ist einfach nur ein rechteck Bereich in einem Bild,enthält Koordinaten.Ein Compilierbares Minibeispielprogramm habe ich leider nicht im Petto.

    Sample[] ls = s.getSubSamples(folds);
    
                                    //for (int k = 0; k < folds; k++)
                                        Parallel.For(0, folds, k =>
                                    {
                                        if (k != f)
                                        {
    
                                            foreach (PluginInterfaces.Point point in ls[k])
                                            //Parallel.ForEach(ls[k], point =>
                                            {
                                                CurrentClassificationPipeline.SelectedClassifier.addTrainingExample(
                                                    s.Label, i.PixelValue(point.x, point.y));
                                            }
                                        }
                                    });
    

Anmelden zum Antworten