약간의 검색이 있었지만 여기에 직면 한 것과 같은 상황을 찾을 수 없습니다. 이 그러나 ReSharper에서이 두 번째 통화에 대한 경고를주고, 잘 보이는 나에게수정 된 종결 질문에 대한 액세스
private static StatsNode CreateASyncStatsNodes(object threadSafeLocker, Dictionary<Thread, StatsNode> threadsafeTeamStats)
{
StatsNode tempStatsNode;
var currentThread = Thread.CurrentThread;
lock (threadSafeLocker)
{
if (!threadsafeTeamStats.ContainsKey(currentThread))
threadsafeTeamStats[currentThread] = new StatsNode(0, 0);
tempStatsNode = threadsafeTeamStats[currentThread];
}
return tempStatsNode;
}
: 여기
var threadsafeVacantStats = new Dictionary<Thread, StatsNode>();
var threadSafeVacantLocker = new Object();
var threadsafeZoneStats = new Dictionary<Thread, StatsNode>();
var threadSafeZoneLocker = new Object();
Parallel.ForEach(m_TeamAreasByZone[zone.ContainerID], team =>
{
var tempVacantStatNode = CreateASyncStatsNodes(threadSafeVacantLocker, threadsafeVacantStats);
var tempZoneStatNode = CreateASyncStatsNodes(threadSafeZoneLocker, threadsafeZoneStats);
//...other stuff
}
그것을 부르고 기능이있다 : 여기
내가 걱정 코드 조각이다 CreateASyncStatsNodes (첫 번째 호출은 괜찮습니다). 그 조언에 따라 , 그것은으로 블록을 회전 : 이것은 정말 나에게 이해가되지 않습니다
var threadsafeVacantStats = new Dictionary<Thread, StatsNode>();
var threadSafeVacantLocker = new Object();
var threadsafeZoneStats = new Dictionary<Thread, StatsNode>();
var threadSafeZoneLocker = new Object();
object locker = threadSafeZoneLocker;
Dictionary<Thread, StatsNode> stats = threadsafeZoneStats;
Parallel.ForEach(m_TeamAreasByZone[zone.ContainerID], team =>
{
var tempVacantStatNode = CreateASyncStatsNodes(threadSafeVacantLocker, threadsafeVacantStats);
var tempZoneStatNode = CreateASyncStatsNodes(locker, stats);
//...
}
, 실제로 아무것도를 해결하지 않는 것 (이 경우에도 처음에 파손 된 경우) . resharper가 실수로 경고를 표시하고 있습니까, 아니면 뭔가 빠졌습니까?
사용중인 R # 버전은 무엇입니까? R # 5.0을 사용하여 위의 코드에 대한 경고를 얻지 못했습니다. – adrianbanks
그것은 버전 5.1 – Rob
그냥 나머지는 코드를 주석, 여전히 경고를주고 .. 그래서 나는 그것이 실수로 r에 의해 가정하고있어 # – Rob