Действия/Делегаты в C# и Windows Phone 7 (с использованием RestSharp)

Я пишу программу с RestSharp на WP8, точнее с LastFMSharp, но мне нужно обновить методы до ExecuteAsync, так как это WP. Проблема заключается в том, что, как и прежде, Execute(request) возвращал RestResponse, ExecuteAsync возвращает RestRequestAsyncHandle. Мне нужен этот RestResponse для моего метода. Итак, как мне получить его в ответе var? Имейте в виду, что структура

RestSharp.RestClient.ExecuteAsync<T>(RestSharp.IRestRequest,System.Action<RestSharp.IRestResponse<T>,RestSharp.RestRequestAsyncHandle>)

Спасибо за помощь!

Оригинал:

public RestResponse<T> Execute<T>(RestRequest request) where T : new()
{
     request.AddParameter("api_key", _apiKey);

     var response = _restClient.Execute<T>(request);
     RequestCount++;
     DataCount += response.RawBytes.Length;
     return response;
}

Изменено (не работает, не уверен, каким должен быть обратный вызов):

public RestResponse<T> Execute<T>(RestRequest request) where T : new()
{
         request.AddParameter("api_key", _apiKey);

        //var response = 
        _restClient.ExecuteAsync(request, response =>
                        {
                            callback(response.Content);
                        });

        RequestCount++;
        DataCount += response.RawBytes.Length;
        return response;
}

обратный вызов инициализирует ответ? как мне это сделать?


person Dreken105    schedule 18.12.2012    source источник


Ответы (1)


Вы не можете, поскольку ответ не произойдет до некоторого времени в будущем, после чего будет вызван обратный вызов.

Поскольку это Windows Phone 8, попробуйте использовать async\await шаблон.

person Paul Annetts    schedule 18.12.2012
comment
В частности, вы можете использовать TaskCompletionSource<RestResponse<T>> для переноса ExecuteAsync и его обратного вызова в метод, возвращающий Task<RestResponse<T>>. - person Stephen Cleary; 18.12.2012
comment
Хорошо, спасибо, ребята, я отпишусь, если у меня возникнут проблемы. Думаю, последствия использования асинхронности меня не поразили. - person Dreken105; 19.12.2012