/// <summary>
        /// Kick off asynchronous request.
        /// </summary>
        /// <param name="session">Client session</param>
        /// <param name="req">API command</param>
        /// <returns>Asynchronous task job id.</returns>
        public static string StartAsyncJob(Client session, APIRequest req)
        {
            XDocument resp = session.SendRequest(req);

            XElement jobid = resp.Descendants("jobid").FirstOrDefault();

            if (jobid == null || string.IsNullOrEmpty(jobid.Value))
            {
                throw new CloudStackException("Async command failed to return jobid", req.ToString(), resp);
            }
            return jobid.Value;
        }
 /// <summary>
 /// Polls AsyncJob, returns XDocument when job is done.
 /// </summary>
 /// <param name="session">Client connection to CloudStack API</param>
 /// <param name="jobid">Asynchronous job</param>
 /// <returns>Response from async operation.</returns>
 /// <remarks>
 /// Sample result in SampleResponses.QueryAsyncJobResponse
 /// </remarks>
 public static XDocument QueryAsyncJobResult(Client session, string jobid)
 {
     APIRequest req = new SDK.APIRequest("queryAsyncJobResult");
     req.Parameters["jobid"] = jobid;
     return session.SendRequest(req);
 }