Wie sammle ich Rückgabewerte von Parallel.ForEach?

Nenne ich eine langsame webservice parallel. Die Dinge waren großartig, bis ich erkannte, dass ich brauchen, um einige Informationen vom Dienst zurück. Aber ich sehe nicht, wo man die Werte zurück. Ich kann nicht in die Datenbank schreiben, HttpContext.Aktuelle zu sein scheint null innerhalb einer Methode aufgerufen, über die Parallel.ForEach

Unten ist ein Beispiel-Programm (in deinem Geist, bitte stellen Sie sich eine langsame web service anstelle der string-Verkettung)

using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        WordMaker m = new WordMaker();
        m.MakeIt();
    }
    public class WordMaker
    {
        public void MakeIt()
        {
            string[] words = { "ack", "ook" };
            ParallelLoopResult result = Parallel.ForEach(words, word => AddB(word));
            Console.WriteLine("Where did my results go?");
            Console.ReadKey();
        }
        public string AddB(string word)
        {
            return "b" + word;
        }
    }

}
Kommentar zu dem Problem
Eine andere überladung von Parallel.ForEach kann das sein, was Sie wollen: msdn.microsoft.com/en-us/library/dd991486.aspx Kommentarautor: Austin Salonen
Leider ist nicht wirklich etwas, das Sie tun können, dass. Parallel.Foreach() nur noch nicht gebaut war zum verfolgen gibt. Ich würde jedoch empfehlen die Verwendung von ref - Parameter im AddB Funktion. Das könnte es tun. Kommentarautor: Phillip Schmidt
@PhillipSchmidt: Nicht mit der überlastung in dem Beispiel verwendet sowieso... Kommentarautor: Austin Salonen
@AustinSalonen, Was eine weitere überladung, die funktionieren würde? Ich argumentiere nicht, ich war einfach nicht bewusst, dass alles tun würde, was er will. Kommentarautor: Phillip Schmidt
@PhillipSchmidt Den link in meinem ersten Kommentar explizit behandelt, eine Func<...> statt Action - <...> Kommentarautor: Austin Salonen

InformationsquelleAutor der Frage MatthewMartin | 2012-09-26

Schreibe einen Kommentar