client.ExecuteAsync <T>Делегат не принимает 1 аргумент - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь изменить мой клиент Restsharp на работу async вместо sync.Каждый из моих API-вызовов ссылается на метод GetAsync<T>.Когда я пытаюсь изменить клиент для вызова ExecuteAsync<T> вместо Execute, я получил эту ошибку:

Делегат «Действие, RestRequestAsyncHandle>» не принимает 1 аргумент

В настоящее время я использую RestSharp версии 106.6.10.

Вот мой GetAsyncMethod:

public async Task<T> GetAsync<T>(string url, Dictionary<string, object> keyValuePairs = null)
    {
        try
        {
            // Check token is expired
            DateTime expires = DateTime.Parse(Account.Properties[".expires"]);
            if (expires < DateTime.Now)
            {
                // Get new Token 
                await GetRefreshTokenAsync();
            }

            // Get AccessToken
            string token = Account.Properties["access_token"];

            if (string.IsNullOrEmpty(token))
                throw new NullReferenceException("AccessToken is null or empty!");

            // Create client
            var client = new RestClient()
            {
                Timeout = 3000000
            };

            //Create Request
            var request = new RestRequest(url, Method.GET);
            request.RequestFormat = DataFormat.Json;
            request.AddHeader("Authorization", "Bearer " + token);

            // Add Parameter when necessary 
            if (keyValuePairs != null)
            {
                foreach (var pair in keyValuePairs)
                {
                    request.AddParameter(pair.Key, pair.Value);
                }
            }
            // Call
            var result = default(T);

            var asyncHandle = client.ExecuteAsync<T>(request, restResponse =>
            {
                // check respone 
                if (restResponse.ResponseStatus == ResponseStatus.Completed)
                {
                    result = restResponse.Data;
                }

                //else
                //    throw new Exception("Call stopped with Status: " + response.StatusCode +
                //                        " Description: " + response.StatusDescription);
            });

            return result;
        }
        catch (Exception ex)
        {
            Crashes.TrackError(ex);
            return default(T);
        }
    }

Вот один из методов вызова:

public async Task<List<UcAudit>> GetAuditByHierarchyID(int hierarchyID)
    {
        string url = AuthSettings.ApiUrl + "/ApiMethod/" + hierarchyID;

        List<UcAudit> auditList = await GetAsync<List<UcAudit>>(url);
        return auditList;
    }

Когда я изменяю T в ExecuteAsync<T> в одном из моих классов, ошибка исчезает.Как я могу изменить метод для работы async с <T> ???

1 Ответ

0 голосов
/ 09 июля 2019

С информацией от Лассе Вогсхер Карлсен я нашел решение.

Это начало:

var asyncHandle = client.ExecuteAsync<T>(request, restResponse =>
        {
            // check respone 
            if (restResponse.ResponseStatus == ResponseStatus.Completed)
            {
                result = restResponse.Data;
            }

            //else
            //    throw new Exception("Call stopped with Status: " + response.StatusCode +
            //                        " Description: " + response.StatusDescription);
        });

Сработало у меня:

client.ExecuteAsync<T>(request, (response, asyncHandle )=>
            {
                //check respone
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    result = response.Data;
                }
                else
                    throw new Exception("Call stopped with Status: " + response.StatusCode +
                                        " Description: " + response.StatusDescription);
            });

Спасибо!

...