Már láttuk, hogy a munkaterületkódnak tudnia kell kezelni a konkurenciát akkor is, ha nem használja a konkurencia-keretrendszert. A munkaterület-módosítások kötegelése és az ütemezési szabályok használata lehetővé teszi a munkaterület megosztását más bedolgozókkal (és ezek szálaival), amelyek módosítják a munkaterületet. Ha a bedolgozó kötegelési szabályt használ (lásd Erőforrásmódosítások kötegelése), akkor egyszerű végrehajtani ugyanazt a feladatot a platform konkurencia mechanizmusok segítségével.
A feladat az aszinkron munka alapegysége, amely más feladatokkal egyidejűleg fut. Az erőforrások bedolgozó meghatározza a WorkspaceJob elemet az aszinkron erőforrásmódosítások megadásának mechanizmusaként. A kód, amely normál esetben egy IWorkspaceRunnable elemben kerülne kötegelésre, a munkaterület feladat-altípus egy runInWorkspace metódusába kerül be. A kód IWorkspace protokollal futtatása helyett a feladat ugyanúgy kerül ütemezésre, mint a többi feladat. A megfelelő ütemezési szabályokat ütemezés előtt hozzá kell adni a feladathoz.
Tekintse meg a példa munkaterület futtatható fájlt, és hogy mit kell tenni, hogy feladat legyen belőle:
IWorkspaceRunnable myRunnable = new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) throws CoreException { //a tényleges munka itt történik doSomeWork(); ... } }
A feladat átkerült a WorkspaceJob altípus megfelelő metódusába.
class MyWorkspaceJob extends WorkspaceJob { public MyWorkspaceJob() { super("My Workspace Job"); } public IStatus runInWorkspace(IProgressMonitor monitor) { //a tényleges munka itt történik doSomeWork(); return Status.OK_STATUS; } }
A futtatható fájlokat speciálisan meg kell hívni:
IWorkspace workspace = ResourcesPlugin.getWorkspace(); workspace.run(myRunnable, myProject, IWorkspace.AVOID_UPDATE, null);
A feladat a többi feladathoz hasonlóan van ütemezve. A platform feladatkezelő a prioritásnak, a sor egyéb feladatainak, és az ütemezési szabályoknak megfelelően fogja futtatni. Ne feledje el, hogy az ütemezési szabályt a feladathoz kell csatolni a myProject egyidejű módosítása érdekében.
MyWorkspaceJob job = new MyWorkspaceJob(); job.setRule(myProject); job.schedule();
Most, hogy a művelet már feladatként van strukturálva, az összes ütemezési mechanizmus (prioritás, késleltetés, újbóli ütemezés) használható. Az erőforrásmódosítási események kötegelve lesznek, amíg a feladat be nem fejezi a futást.