Поделиться через


DataServiceContext.EndExecute<TElement>(IAsyncResult) Метод

Определение

Вызывается для завершения BeginExecute<TElement>(Uri, AsyncCallback, Object).

public:
generic <typename TElement>
 System::Collections::Generic::IEnumerable<TElement> ^ EndExecute(IAsyncResult ^ asyncResult);
public System.Collections.Generic.IEnumerable<TElement> EndExecute<TElement> (IAsyncResult asyncResult);
member this.EndExecute : IAsyncResult -> seq<'Element>
Public Function EndExecute(Of TElement) (asyncResult As IAsyncResult) As IEnumerable(Of TElement)

Параметры типа

TElement

Тип, возвращаемый запросом.

Параметры

asyncResult
IAsyncResult

Объект IAsyncResult.

Возвращаемое значение

IEnumerable<TElement>

Результаты, возвращаемые операцией запроса.

Исключения

Если значение параметра asyncResult равно null.

Если asyncResult не происходит от этого экземпляра DataServiceContext.

-или-

Был ранее вызван метод EndExecute<TElement>(IAsyncResult).

Если возникает ошибка во время выполнения запроса или в случае, если запрос преобразует содержимое ответного сообщения в объекты.

Примеры

Следующий пример иллюстрирует выполнение асинхронного запроса путем вызова метода BeginExecute для запуска запроса. Встроенный делегат вызывает метод EndExecute для отображения результатов запроса. В этом примере используется объект , DataServiceContext созданный средством Добавления ссылки на службу на основе службы данных Northwind, который создается при выполнении WCF Data Services .

public static void BeginExecuteCustomersQuery()
{
    // Create the DataServiceContext using the service URI.
    NorthwindEntities context = new NorthwindEntities(svcUri);

    // Define the query to execute asynchronously that returns
    // all customers with their respective orders.
    DataServiceQuery<Customer> query = (DataServiceQuery<Customer>)(from cust in context.Customers.Expand("Orders")
                                       where cust.CustomerID == "ALFKI"
                                       select cust);

    try
    {
        // Begin query execution, supplying a method to handle the response
        // and the original query object to maintain state in the callback.
        query.BeginExecute(OnCustomersQueryComplete, query);
    }
    catch (DataServiceQueryException ex)
    {
        throw new ApplicationException(
            "An error occurred during query execution.", ex);
    }
}

// Handle the query callback.
private static void OnCustomersQueryComplete(IAsyncResult result)
{
    // Get the original query from the result.
    DataServiceQuery<Customer> query =
        result as DataServiceQuery<Customer>;

    foreach (Customer customer in query.EndExecute(result))
    {
        Console.WriteLine("Customer Name: {0}", customer.CompanyName);
        foreach (Order order in customer.Orders)
        {
            Console.WriteLine("Order #: {0} - Freight $: {1}",
                order.OrderID, order.Freight);
        }
    }
}
Public Shared Sub BeginExecuteCustomersQuery()
    ' Create the DataServiceContext using the service URI.
    Dim context = New NorthwindEntities(svcUri)

    ' Define the delegate to callback into the process
    Dim callback As AsyncCallback = AddressOf OnCustomersQueryComplete

    ' Define the query to execute asynchronously that returns 
    ' all customers with their respective orders.
    Dim query As DataServiceQuery(Of Customer) = _
    context.Customers.Expand("Orders")

    Try
        ' Begin query execution, supplying a method to handle the response
        ' and the original query object to maintain state in the callback.
        query.BeginExecute(callback, query)
    Catch ex As DataServiceQueryException
        Throw New ApplicationException( _
                "An error occurred during query execution.", ex)
    End Try
End Sub
' Handle the query callback.
Private Shared Sub OnCustomersQueryComplete(ByVal result As IAsyncResult)
    ' Get the original query from the result.
    Dim query As DataServiceQuery(Of Customer) = _
        CType(result.AsyncState, DataServiceQuery(Of Customer))

    ' Complete the query execution.
    For Each customer As Customer In query.EndExecute(result)
        Console.WriteLine("Customer Name: {0}", customer.CompanyName)
        For Each order As Order In customer.Orders
            Console.WriteLine("Order #: {0} - Freight $: {1}", _
                    order.OrderID, order.Freight)
        Next
    Next
End Sub

Комментарии

В соответствии со стандартной асинхронной технологией begin-end, предоставленный обратный вызов запрашивается при извлечении результатов запроса. Дополнительные сведения см. в разделе Асинхронные операции.

При вызове функции обратного вызова все результаты считываются из HTTP-потока, но еще не обрабатываются. Локальные пользовательские объекты еще не материализовывались и не изменялись. Разрешение идентичности не выполнялось. Если вызывается EndExecute, создается и возвращается DataServiceResponse, но результаты еще не обрабатываются. Разрешение идентичности, материализация объектов и манипулирование происходят только после перечисления результатов пользователем.

Применяется к

См. также раздел