2017-09-01 6 views
-2

Ein einfaches Parallel.ForEachMit Parallel.ForEach in einer Klassenbibliothek

using System; 
using System.Collections.Generic; 
using System.Threading.Tasks; 

namespace UtilyTools 
{ 
    public class Why 
    { 
     public void gluk() 
     { 
      var intList= new List<int> { 1, 2, 3}; 
      int notMatter=0; 
      Parallel.ForEach(list, (item) => notMatter+= item); 
     } 
    } 
    // [...] 

gibt mir den alten nicht in der Bibliothek Klasse sein wollen:

CS0103 C# The name Parallel does not exist in the current context

Project.csproj:

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <TargetFramework>netstandard1.4</TargetFramework> 
    </PropertyGroup> 
</Project> 

Nach Aufforderung ein Screenshot des Fehlers: NB: Verwendung sind nicht Unterstreiche rot.

Picture of the issue

+1

Was ist der genaue Fehler? – Carcigenicate

+3

Beachten Sie, dass dies zu Nebenläufigkeitsproblemen führt (das Ändern und Lesen derselben Variablen in mehreren Threads). – Caramiriel

+0

@Caramiriel, Nun, die 'Parallele' in der Fehlermeldung wurde verloren, wenn ich den Fehler auf Englisch übersetze. Entschuldigung –

Antwort

3

Da Sie die .NetStandard Bibliothek verwenden und nicht die .NetFramework, müssen Sie System.Threading.Tasks.Parallel als Abhängigkeit in Ihr Projekt einfügen.

+1

Das Problem war ein einfacher Missclick beim Erstellen der Bibliothek. Es war keine beabsichtigte Verwendung der '. NetStandard'-Bibliothek. –

+0

@DragandDrop Ich hatte vor ein paar Wochen die gleichen Probleme, darum habe ich danach gefragt. Sie müssen sich daran erinnern, dass .NET Core modularer ist als das "alte" .NET Framework. Sie müssen also nur prüfen, ob es ein zusätzliches Modul/Bibliothek für die Dinge gibt, die normalerweise in mscorlib.dll waren –

2
Parallel.ForEach(list, (item) => please += item); 

sollte sein:

Parallel.ForEach(intList, (item) => please += item); 

Sie haben einen Tippfehler auf den Variablennamen (seit korrigiert).

Zusätzlich please += item ist nicht thread safe - Sie Interlocked.Add stattdessen verwenden sollten.

Also, stellen Sie sicher, dass Ihr Target Framework ist mindestens .NET Framework 4. Dann machen 100% sicher, dass diese Zeile am Anfang der Datei:

using System.Threading.Tasks; 

Wenn Sie verwenden .NET Standard dann sehen @ m.rogalski die Antwort.

+1

@mjwills Ich würde hinzufügen, dass Parallel mit dem .NET 4.0 hinzugefügt wurde, so ist es erforderlich, den Aufbau gegen diese oder höhere Version festzulegen. –

+0

Die Funktion ist komplexer als eine einfache '+ =', es ist nur eine MCVE mit dem gleichen Fehler –

Verwandte Themen