client.ExecuteAsync <T>委托不接受1个参数

时间:2019-07-09 09:25:23

标签: c# restsharp

我正在尝试将Restsharp Client更改为使用async而不是sync。 我的每个API调用都引用GetAsync<T>方法。当我现在尝试更改客户端以调用ExecuteAsync<T>而不是Execute时,出现此错误:

  

委托'Action,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 :(得分:0)

借助LasseVågsætherKarlsen的信息,我找到了解决方案。

这是开始:

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);
            });

谢谢!