RestSharp выкидывает NullReferenceException
В общем, стучусь на некоторый ресурс, дергая вот этот метод:
RestSharp.RestRequestAsyncHandle ExecuteAsync(this RestSharp.IRestClient client, RestSharp.IRestRequest request, System.Action<RestSharp.IRestResponse> callback)
А дальше в callback обрабатываю response.
Проблема в том, что есть 10% response к этому ресурсу, которые приходятся со StatusCode=0 и исключением:
System.NullReferenceException: Object reference not set to an instance of an object.
at RestSharp.Http.GetRawResponseAsync(IAsyncResult result, Action`1 callback)
at RestSharp.Http.ResponseCallback(IAsyncResult result, Action`1 callback)
и пустым контентом.
Т.е похоже, что проблема в RestSharp (использую последнюю версию). Нашел вот такой тред, но ответов на вопросы я не получил. Однако понять, что ему не нравится, я не могу, так как запрос корректен и успешно выполняется через cURL.
В чем может быть проблема?
Ответы (1 шт):
Глядя в исходники можно заметить, что в самой новой версии RestSharp этот метод помечен как [Obsolete("Use ExecuteAsync that returns Task")]. Но при этом подходящего метода, который бы возвращал Task, и в который можно было бы передать callback я не смог найти. Наиболее подходящий метод RestClient также помечен как Obsolete, и он все равно возвращает RestRequestAsyncHandle:
[Obsolete("This method will be removed soon in favour of the proper async call")]
public virtual RestRequestAsyncHandle ExecuteAsync(
IRestRequest request,
Action<IRestResponse, RestRequestAsyncHandle> callback,
Method httpMethod
UPD.
Я сразу не обратил внимания на тип делегата callback. Пользуйтесь этим методом класса RestClient:
public Task<IRestResponse> ExecuteAsync(
IRestRequest request,
Method httpMethod,
CancellationToken cancellationToken = default)