J'ai eu un peu de recherche, mais je ne pouvais pas trouver la même situation que je suis confronté ici.Accès à la question de fermeture modifiée
est ici l'extrait que je suis inquiet:
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
}
est ici la fonction qu'il appelle:
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;
}
Pour moi, cela semble bien, cependant ReSharper donne un avertissement pour le second appel à CreateASyncStatsNodes (le premier appel est bien). Après son avis, il transforme le bloc en:
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);
//...
}
Cela ne me fait pas vraiment de sens, et ne semble pas vraiment fixer quoi que ce soit (si elle a même été cassé en premier lieu) . Resharper est-il en train de marquer par erreur un avertissement ou est-ce que je manque quelque chose?
Quelle version de R # utilisez-vous? Je ne reçois pas l'avertissement pour le code ci-dessus en utilisant R # 5.0. – adrianbanks
Il est la version 5.1 – Rob
Juste commenté le reste du code, toujours donner l'avertissement .. donc je suppose que c'est une erreur par r # – Rob