protected static async Task<IApiResult<IEnumerable<long>>> RetrieveCursoredResult(ApiAccessor accessor,
     Func<ApiAccessor, long, Task<IApiResult<ICursorResult<IEnumerable<long>>>>> func,
      Action<Exception> exceptionHandler, CancellationToken token)
 {
     var resultList = new List<long>();
     CursorResultExtension.ApiContinuationReader<IEnumerable<long>> reader =
         () => accessor.ReadCursorApi(func, token);
     var lastRateLimit = RateLimitDescription.Empty;
     while (reader != null)
     {
         try
         {
             var result = await reader().ConfigureAwait(false);
             resultList.AddRange(result.Item1.Result);
             lastRateLimit = result.Item1.RateLimit;
             reader = result.Item2;
         }
         catch (Exception ex)
         {
             exceptionHandler(ex);
             break;
         }
     }
     return ApiResult.Create(resultList, lastRateLimit);
 }