2017-11-29 2 views
2

Ich möchte Parallel.ForEach mit einem List verwenden, aber ich kann es nicht tun.Wie Parallel.ForEach mit einer Liste zu verwenden?

Hier ist mein aktueller Code:

class Test1 
{ 
    public static List<string> myList = new List<string>(); 

    public object myListToArray() 
    { 
     return myList.ToArray(); 
    } 
} 

class Test2 
{ 
    public void Test(){ 
     Task.Factory.StartNew(() => Parallel.ForEach(new Test1().myListToArray(), new ParallelOptions { MaxDegreeOfParallelism = 250 }, foo => 
     { 
      // do stuff 
     })); 
    } 
} 

Ich erhalte diese Fehlermeldung:

Unable to derive the type arguments for the 'Parallel.ForEach' method from use. Try to specify the type arguments explicitly.

Wie kann ich es beheben?

+2

Warum verwenden Sie 'ArrayList' anstatt' List '? Hilft https://social.msdn.microsoft.com/Forums/vstudio/en-US/8c29c33b-840d-4255-bb23-2237b5e64d02/how-to-use-parallelfore-ach-against-arraylist?forum=parallelextensions? – mjwills

+0

Sie sind wirklich mit dem Array gefangen, mit dem Sie gut sein sollten. ToList() – BugFinder

+2

Ich stimme mit @mjwills überein, dass Sie eine 'ArrayList' in diesen Tagen nicht mehr verwenden sollten, ursprünglich kommt dies aus einer Zeit, als eine 'Liste ' nicht existiert. Die 'Liste ' hat einige Vorteile und Eigenschaften, die die 'ArrayList' nicht bieten kann. –

Antwort

1

Ihre vorhandenen Code funktioniert nicht, da Parallel.ForEach nicht weiß, wie über object (über Code) iterieren/ArrayList (Code in Ihrem ursprünglichen Post).

public void Test(){ 
    Task.Factory.StartNew(() => Parallel.ForEach(Test1.myList, new ParallelOptions { MaxDegreeOfParallelism = 250 }, foo => 
    { 
     // do stuff 
    })); 

arbeiten seit myList eine generische List ist, die Parallel.ForEach weiß, wie zu handhaben.

-1

Ich änderte wenig Code, einen Blick auf Test() Methode,

class Test1 
{ 
    public static List<string> myList = new List<string>() { "11","22","33"}; 

    public object myListToArray() 
    { 
     return myList.ToArray(); 
    } 
} 



class Test2 
{ 
    public void Test() 
    { 
     var test = new Test1(); 
     Parallel.ForEach((test.myListToArray() as IEnumerable<string>), (value) => { Console.WriteLine(value); }); 

    } 
} 
+0

Was ist der Vorteil der Umwandlung einer Liste in ein Array, dann Casting zu einem Objekt, dann Casting zu einem Imenumerable? – mjwills

+0

@mjwills Es ist Komödie. ;-) –

Verwandte Themen