class PostOrderTask extends Task {

    @Nullable
    @Override
    Void execute() throws Exception {
        String advertisingId = features.getIncludesIfa() ? deviceManager.getAdvertisingId() : null;
        // loop and execute postOrder until max retries is met or non case exception is met
        while (true) {
            try {
                return buttonApi.postOrder(order, applicationId, sourceToken, advertisingId);
            } catch (ButtonNetworkException exception) {
                if (!shouldRetry(exception)) {
                    throw exception;
                }

                retryCount++;
            }
        }
    }

      PostOrderTask(@Nullable Listener listener, ButtonApi buttonApi, Order order,
            String applicationId, String sourceToken, DeviceManager deviceManager,
            Features features, ThreadManager threadManager);

}