title: When do we need to use 'finishTasksAndInvalidate' for NSUrlSession?
body: <p>I call under mentioned code when my app is notified by entering to background:</p>
  
  <pre><code>[[NSNotificationCenter defaultCenter] addObserver: self
                              selector: @selector(handleDidEnterBackground)
                              name: UIApplicationDidEnterBackgroundNotification
                              object: nil];
  </code></pre>
  
  <p>I have following code snippet <code>handleDidEnterBackground</code>:</p>
  
  <pre><code>NSURLSession *session;
  
  // ...
  
  sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.my.company"];
  sessionConfiguration.allowsCellularAccess = YES;
  sessionConfiguration.sessionSendsLaunchEvents = NO;
  session = [NSURLSession sessionWithConfiguration:sessionConfiguration 
              delegate:self 
         delegateQueue:nil];
  
  
  NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request];
      [task resume];
   // why do I need this line?   
  [session finishTasksAndInvalidate];
  </code></pre>
  
  <hr>
  
  <p>From Doc:</p>
  
  <pre><code>/* -finishTasksAndInvalidate returns immediately and existing tasks will be allowed  
  * to run to completion.  New tasks may not be created.  The session  
  * will continue to make delegate callbacks until URLSession:didBecomeInvalidWithError:  
  * has been issued.   
  *
  * -finishTasksAndInvalidate and -invalidateAndCancel do not  
  * have any effect on the shared session singleton.  
  *  
  * When invalidating a background session, it is not safe to create another background  
  * session with the same identifier until URLSession:didBecomeInvalidWithError: has  
  * been issued.
    */
  - (void)finishTasksAndInvalidate;
  </code></pre>
  
  <p>I try to read it again and again but fail to understand the usage. Can somebody spread the light on this API?</p>