Skip to content

Instantly share code, notes, and snippets.

@fubar-coder
Last active August 29, 2015 14:16
Show Gist options
  • Save fubar-coder/7c110d84891e8b398d71 to your computer and use it in GitHub Desktop.
Save fubar-coder/7c110d84891e8b398d71 to your computer and use it in GitHub Desktop.
Execute request with callbacks
public static class RestClientExecuteWithCallback
{
public static Task ExecuteWithCallbacks<T>(this IRestClient client, IRestRequest request, Action<T> success, Action<Exception, string> failure)
{
return ExecuteWithCallbacks(client, request, success, failure, null);
}
public static Task ExecuteWithCallbacks<T>(this IRestClient client, IRestRequest request, Action<T> success, Action<Exception, string> failure, Action<IRestResponse, string> requestFailure)
{
if (success == null)
throw new ArgumentNullException("success");
if (failure == null)
throw new ArgumentNullException("failure");
var execTask = client.Execute<T>(request);
execTask
.ContinueWith(
t =>
{
var result = t.Result;
if (result.Data == null)
{
if (requestFailure != null)
requestFailure(t.Result, "Result data is null");
else
failure(new NullReferenceException(), "Result data is null");
}
else
success(result.Data);
},
TaskContinuationOptions.OnlyOnRanToCompletion);
execTask
.ContinueWith(
t =>
{
var exception = t.Exception.InnerException;
failure(exception, exception.Message);
},
TaskContinuationOptions.OnlyOnFaulted);
return execTask;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment