protected boolean setResult(
      @Nullable T value, boolean isLast, @Nullable Map<String, Object> extras) {
    setExtras(extras);
    boolean result = setResultInternal(value, isLast);
    if (result) {
      notifyDataSubscribers();
    }
    return result;
  }
Subclasses should invoke this method to set the result to {@code value}.

<p>This method will return {@code true} if the value was successfully set, or {@code false} if
the data source has already been set, failed or closed.

<p>If the value was successfully set and {@code isLast} is {@code true}, state of the data
source will be set to {@link AbstractDataSource.DataSourceStatus#SUCCESS}.

<p>{@link #closeResult} will be called for the previous result if the new value was
successfully set, OR for the new result otherwise.

<p>This will also notify the subscribers if the value was successfully set.

<p>Do NOT call this method from a synchronized block as it invokes external code of the
subscribers.

@param value the value that was the result of the task.
@param isLast whether or not the value is last.
@param extras an object with extra data for this datasource
@return true if the value was successfully set.
fbcore/src/main/java/com/facebook/datasource/AbstractDataSource.java