How does a dictionary get passed byref to a Task
A Dictionary is a reference type so it doesn't matter too much if it is passed by-value or by-ref. But as it happens closure is mostly like by-ref.
In your code:
Dictionary<string, WSResponse> responseDictionary = ...;
Task newTask = Task.Factory.StartNew(() =>
{
WSResponse response = Query.GetListFor(localID);
responseDictionary.Add(localID, response);
});
The dictionary is declared outside the scope of the Task lambda but the lambda does use it by name. This is allowed and called 'closing over' the variable.
And that means that multiple threads can access your Dictionary and it should be replaced by a ConcurrentDictionary. Most likely that will solve the diagnostic message.