Главное, чтобы понять, что объектная модель клиента спроектирована так, чтобы быть асинхронной от get go.
Подумайте о своем объекте контекстного объекта в качестве судна для отправки инструкций и получения данных. Метод .Load()
ставит в очередь инструкции, такие как .Load(item)
, в порядке очереди, чтобы получить данные о данном элементе списка.
Методыи .ExecuteQueryAsync()
отправляют эти поставленные в очередь инструкции и извлекают результаты с сервера.
Эти операции отличаются от операций, которые вы можете выполнять против реальных объектов SharePoint, таких как списки и элементы списка. Рассмотрим this example from Microsoft:
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
ListItem newListItem = targetList.AddItem(itemCreateInfo);
newListItem["Title"] = "New Announcement";
newListItem["Body"] = "Hello World!";
newListItem.Update();
clientContext.Load(newListItem);
clientContext.ExecuteQuery(); // only at this point is the item actually created
При создании ListItem
объекта в клиентской объектной модели, все, что вы делаете, это создать объект в локальный memory-- вы не посылали ничего на сервер еще на самом деле создать в списке. Объект ListItem
является просто заполнителем, и все, что вы делаете с ним (например, создаете его и устанавливаете его значения полей в приведенном выше примере), хранится в виде инструкций, которые необходимо выполнить.
Когда вы загружаете этот объект в объект контекста клиента (через clientContext.Load(newListItem)
, вы просто загружаете эти инструкции в свой Контекст клиента. После запуска clientContext.ExecuteQuery()
эти инструкции выполняются, и объект-заполнитель заполняется любыми актуальными релевантными данными возвращается с сервера.
это может помочь, если вы его не видели -> [Выполнение основных операций] (https://msdn.microsoft.com/en-us/library/office/jj163201.aspx) – WhiteHat