вы говорите food
- это string
; теперь string
s являются неизменяемыми, поэтому , что не изменилось во время метода - и параметр food
не является опорным (ref
), поэтому , что не изменился во время метода.
Converter.XMLStringToObject
появляется (сложно сказать), чтобы проанализировать строку для объекта, поэтому там нет общего состояния, если у вас нет кеша, о котором вы нам не сказали.
Итак ... это просто ошибка в вашем коде; не имеет ничего общего с потоками.
Примечание: параметры метода и переменные на вызов - они изолированы (если они не относятся к общему состоянию).
Это не проблема с потоками. Просто заурядная ошибка. В какой-то момент во время разбора вы назвали его яблоком, но присвоили ему оранжевый. Проследите через XMLStringToObject
, чтобы найти его, в частности, посмотрите, где назначены .FoodType
и FoodObject
.
В качестве отступления - lock(this)
- плохая идея в общем ; в этом случае он также не делает ничего полезного, поскольку у вас нет общего состояния для защиты. Если бы было использованием, было бы предпочтительным иметь выделенный объект для этого:
private readonly object syncLock = new object();
...
lock(syncLock) {...}