Monitoring TaskInfo Properties

To monitor the state of a
Task
, use the
PropertyCollector.WaitForUpdatesEx
method.
You can monitor the values of
TaskInfo
properties, which change as the
Task
runs to completion. For example, you can check the values of
startTime
,
queueTime
,
completeTime
,
progress
,
result
, and
state
as the operation progresses. Monitor these properties in your code in a separate thread until the
Task
completes, while the main line of your code continues with other activities.
For more information about monitoring properties, see Client Data Synchronization (WaitForUpdatesEx).
Your code must handle the datatype returned when the
Task
completes (managed object reference, data object, and so on). In addition to
success
,
queued
, and
running
, an operation can enter an
error
state, which your code must handle.
A
Task
object has a lifecycle that is independent of the
TaskManager
that creates it and independent of the entity with which it is associated. It exists to convey status about an operation. You can discard the reference to it when your application no longer needs the information.
The following example shows a code fragment that obtains values for the
info
property from each
Task
object in the array.
Displaying TaskInfoState Values for Tasks in recentTask Array
... private void displayTasks(ObjectContent[] oContents) { for(int oci=0; oci<oContents.length; ++oci) { System.out.println("Task"); DynamicProperty[] dps = oContents[oci].getPropSet(); if(dps!=null) { String op="", name="", type="", state="", error=""; for(int dpi=0; dpi<dps.length; ++dpi) { DynamicProperty dp = dps[dpi]; if("info.entity".equals(dp.getName())) { type = ((ManagedObjectReference)dp.getVal()).getType(); } else if ("info.entityName".equals(dp.getName())) { name = ((String)dp.getVal()); } else if ("info.name".equals(dp.getName())) { op = ((String)dp.getVal()); } else if ("info.state".equals(dp.getName())) { TaskInfoState tis = (TaskInfoState)dp.getVal(); if(TaskInfoState.error.equals(tis)) { state = "-Error"; } else if(TaskInfoState.queued.equals(tis)) { state = "-Queued"; } else if(TaskInfoState.running.equals(tis)) { state = "-Running"; } else if(TaskInfoState.success.equals(tis)) { state = "-Success"; } } else if ("info.cancelled".equals(dp.getName())) { Boolean b = (Boolean)dp.getVal(); if(b != null && b.booleanValue()) { state += "-Cancelled"; } }...
Sample Run of the TaskList Java Application shows output from a run of the program. See the source code listing for
TaskList.java
or for
TaskList.cs
in the vSphere Web Services SDK package for details.
Sample Run of the TaskList Java Application
java com.vmware.samples.general.TaskList --url https://srv/sdk --username root --password ******* Started Task Operation AcquireCimServicesTicket Name srv Type HostSystem State -Success Error ====================== Ended TaskList