присвоение ссылки является атомарным, так зачем нужен Interlocked.Exchange (ref Object, Object)?

В моем многопоточном веб-сервисе asmx у меня было поле класса _allData моего собственного типа SystemData, которое состоит из несколькихList<T> а такжеDictionary<T> помечен какvolatile, Системные данные (_allData) обновляется время от времени, и я делаю это, создавая другой объект с именемnewData и заполнить его структуры данных новыми данными. Когда это сделано, я просто назначаю

private static volatile SystemData _allData

public static bool LoadAllSystemData()
{
    SystemData newData = new SystemData();
    /* fill newData with up-to-date data*/
     ...
    _allData = newData.
} 

Это должно работать, поскольку назначение является атомарным, и потоки, имеющие ссылку на старые данные, продолжают его использовать, а остальные получают новые системные данные сразу после назначения. Однако мой коллега сказал, что вместо использованияvolatile Ключевое слово и простое назначение, я должен использоватьInterLocked.Exchange потому что он сказал, что на некоторых платформах не гарантируется, что присвоение ссылок является атомарным. Более того: когда я заявляюthe _allData поле какvolatile 

Interlocked.Exchange<SystemData>(ref _allData, newData); 

выдает предупреждение "ссылка на изменчивое поле не будет рассматриваться как изменчивая" Что я должен думать об этом?

Ответы на вопрос(4)

Ваш ответ на вопрос