Обратный вызов всегда будет вызываться в потоке пользовательского интерфейса.Если в запросе использовался стек XmlHttp (который используется по умолчанию при вызове из потока пользовательского интерфейса), то сетевой стек вызывает обратный вызов, зарегистрированный службой данных WCF в потоке пользовательского интерфейса.Таким образом, в этом случае это поведение DataServiceCollection / DataServiceContext, но поведение базового сетевого стека.Если вы вызываете запрос из потока, не являющегося пользовательским интерфейсом, или явно устанавливаете в стек Http значение Client, тогда обратный вызов возвращается в потоке, не являющемся пользовательским интерфейсом (возможно, в другом).Мы все еще перемещаем его обратно в поток пользовательского интерфейса, прежде чем сообщить об этом вызывающей стороне.Причиной этого является согласованность, особенно если вы не можете взаимодействовать с элементами пользовательского интерфейса в фоновых потоках.
Если вы выполняете запрос вручную, например, через DataServiceContext.BeginExecute, то материализация (илив любом случае) вызывается вызывающей стороной, поскольку вызов возвращает просто IEnumerable, который еще не заполнен.Если вы затем перенесете выполнение в рабочий поток и перечислите результаты там, материализация произойдет в этом потоке.
Просто любопытно, почему вы хотите переместить его?Вы обрабатываете так много данных, что это вызывает видимую задержку пользовательского интерфейса?