blob: 0cadd6b67c9af9bee3e358790dc9abf0589515e7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 474276
*******************************************************************************/
package org.eclipse.core.runtime.jobs;
import org.eclipse.core.runtime.*;
/**
* This is a functional interface representation of {@link Job}, suitable
* for use in lambda expressions.
*
* @see Job#create(String, IJobFunction)
* @since 3.6
*/
public interface IJobFunction {
/**
* Executes this job. Returns the result of the execution.
* <p>
* The provided monitor can be used to report progress and respond to
* cancellation. If the progress monitor has been canceled, the job should
* finish its execution at the earliest convenience and return a result
* status of severity {@link IStatus#CANCEL}. The singleton cancel status
* {@link Status#CANCEL_STATUS} can be used for this purpose. The monitor is
* only valid for the duration of the invocation of this method.
* <p>
* This method must not be called directly by clients. Clients should call
* <code>schedule</code>, which will in turn cause this method to be called.
* <p>
* Jobs can optionally finish their execution asynchronously (in another
* thread) by returning a result status of {@link Job#ASYNC_FINISH}. Jobs
* that finish asynchronously <b>must</b> specify the execution thread by
* calling {@link Job#setThread(Thread)}, and must indicate when they are
* finished by calling the method {@link Job#done(IStatus)}.
*
* @param monitor
* the monitor to be used for reporting progress and responding
* to cancellation. The monitor is never {@code null}. It is the
* caller's responsibility to call
* {@link IProgressMonitor#done()} after this method returns or
* throws an exception.
*
* @return resulting status of the run. The result must not be {@code null}.
* @see Job#ASYNC_FINISH
* @see Job#done(IStatus)
*/
public IStatus run(IProgressMonitor monitor);
}