2017-09-01 23 views
-2

簡單Parallel.ForEach不想在圖書館類在類庫使用Parallel.ForEach

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); 
     } 
    } 
    // [...] 

給我的老:

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> 

按照要求屏幕拍攝的錯誤: nb:使用不是以紅色強調。

Picture of the issue

+1

確切的錯誤是什麼? – Carcigenicate

+3

請注意,這受到併發性問題(在多個線程中變異和讀取相同的變量)。 – Caramiriel

+0

@ Caramiriel,那麼當我翻譯英文錯誤時,錯誤信息中的'Parallel'就會丟失。對不起 –

回答

3

由於您使用的是.NetStandard庫,而不是.NetFramework,因此必須將System.Threading.Tasks.Parallel作爲依賴項包含到項目中。

+1

創建庫時,該問題是一個簡單的錯誤點擊。這不是'.NetStandard'庫的使用。 –

+0

@DragandDrop幾周前我有同樣的問題,這就是爲什麼我問這些。你必須記住,.NET Core比「舊」的.NET框架更模塊化,所以你只需要檢查是否有一個額外的模塊/庫,通常在mscorlib.dll中 –

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

應該是:

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

您在變量名做了一個錯字(自校正)。

此外,please += item不是thread safe - 您應該使用Interlocked.Add來代替。

此外,請確保您的Target Framework至少 .NET框架4 然後,使100%確保此行是在文件的頂部:

using System.Threading.Tasks; 

如果您正在使用.NET Standard,然後參見@ m.rogalski的答案。

+1

@mjwills我會補充說,並行是與.NET 4.0一起添加的,因此需要將構建設置爲針對該版本或更高版本。 –

+0

該函數比簡單的'+ ='更復雜,它只是一個具有相同錯誤的mcve –