Java.Util.Concurrent.ExecutorCompletionService Class
A Java.Util.Concurrent.ICompletionService that uses a supplied Java.Util.Concurrent.IExecutor to execute tasks.

See Also: ExecutorCompletionService Members

Syntax

[Android.Runtime.Register("java/util/concurrent/ExecutorCompletionService", DoNotGenerateAcw=true)]
public class ExecutorCompletionService : Java.Lang.Object, ICompletionService, IDisposable

Remarks

A Java.Util.Concurrent.ICompletionService that uses a supplied Java.Util.Concurrent.IExecutor to execute tasks. This class arranges that submitted tasks are, upon completion, placed on a queue accessible using take. The class is lightweight enough to be suitable for transient use when processing groups of tasks.

Usage Examples. Suppose you have a set of solvers for a certain problem, each returning a value of some type Result, and would like to run them concurrently, processing the results of each of them that return a non-null value, in some method use(Result r). You could write this as:

java Example

void solve(Executor e,
            Collection> solvers)
     throws InterruptedException, ExecutionException {
     CompletionService ecs
         = new ExecutorCompletionService(e);
     for (Callable s : solvers)
         ecs.submit(s);
     int n = solvers.size();
     for (int i = 0; i 
 }}
Suppose instead that you would like to use the first non-null result of the set of tasks, ignoring any that encounter exceptions, and cancelling all other tasks when the first one is ready:

java Example

void solve(Executor e,
            Collection> solvers)
     throws InterruptedException {
     CompletionService ecs
         = new ExecutorCompletionService(e);
     int n = solvers.size();
     List> futures
         = new ArrayList>(n);
     Result result = null;
     try {
         for (Callable s : solvers)
             futures.add(ecs.submit(s));
         for (int i = 0; i 
             } catch (ExecutionException ignore) {}
         }
     }
     finally {
         for (Future f : futures)
             f.cancel(true);
     }

     if (result != null)
         use(result);
 }}

[Android Documentation]

Requirements

Namespace: Java.Util.Concurrent
Assembly: Mono.Android (in Mono.Android.dll)
Assembly Versions: 0.0.0.0
Since: Added in API level 1