

Basic concurrency use cases.  Some are overlapping, but each requires
a different level of concurrency support.  Roughly ordered by perceived
implementation difficulty.  1. and 2. are currently support in Eclipse 2.1,
but we need to keep them in mind with any new story.

1. Allow decoration tasks to continue in background without affecting
   UI responsiveness or ability to modify resources.
   
   Examples:
     a) User performs a CVS update.  While CVS is computing and updating 
        new decorations in various views, the user wants to continue viewing
        and modifying resources.  Duplicate decoration work should be detected
        and avoided (don't decorate the same resource twice if possible).
     b) User is typing in an editor.  Computation of effects such as
        "red sea", and bracket matching should happen in the background
        without affecting responsiveness.

2. Very long running operations that do not modify resources, but must
   be stoppable, and joinable.
   
   Examples:
     a) User imports a JAR file.  This triggers an indexing job in the background.
        User can continue to view and modify resources while indexing happens.
        If the user deletes the JAR, or modifies it, duplicate or superfluous
        background jobs should be canceled automatically.
     b) User imports a JAR file.  This triggers an indexing job in the background.
        User then requests a type hierarchy.  Priority of any index jobs
        required by the type hierarchy should be bumped up and completed
        immediately.

3. Allow browsing during long operation

  Example:
    The user has started some long running background task (checkout,
    import, build, etc).  They want a live UI so they can browse resources
    (get children, get contents, dirty editors) while they wait for the long 
    operation to finish.
    
  Deluxe:
    The background task can complete in chunks, allowing the user to browse
    and modify resources that were involved in the operation.  I.e., they
    can edit imported resources before the import has completed.

4. Allow edit during long running read-only operations
  
  Example:
    The user starts a search.  Since searches don't modify resources,
    the user may want to modify (add, delete, change) resources while
    the search is happening.  This may or may not affect the search
    results.

5. Concurrent edit.

  Examples:
    a) The user does a CVS update on project A while project B is being deleted.
    b) The user does a CVS update on project A while that same project is
    being compiled, deleted, etc.  This is the extreme concurrency example.  

    
6. Allow preemption and restart on long-running operation.

  Examples:
  	a) The Mcq example.  User hits save on a file, and build starts.  User
  	   realizes that there is an error, and they modify and save again.
  	   They want to cancel the currently running build and start a new one.
  	b) User selects a revision in the CVS repositories view, and hits
  	   checkout.  While checkout is running, user realizes they chose
  	   the wrong version, and they want to checkout a different one instead.
  	   They want to cancel the current checkout and pre-empt with another.
  	   
