private Task GetTask() { Session session = _action.Session; try { return((Task)_action.DoWithSessionRetry(ref session, (Task.TaskGetRecordOp)Task.get_record, _action.RelatedTask.opaque_ref)); } finally { _action.Session = session; } }
private void Poll() { Session session = _action.Session; Task task; try { task = (Task)_action.DoWithSessionRetry(ref session, (Task.TaskGetRecordOp)Task.get_record, _action.RelatedTask.opaque_ref); } catch (Failure exn) { if (exn.ErrorDescription.Count > 1 && exn.ErrorDescription[0] == Failure.HANDLE_INVALID && exn.ErrorDescription[1] == "task") { GotInvalidHandle(); return; } else { throw; } } finally { _action.Session = session; } _action.Tick((int)(task.progress * _scale + _lo), task.Description() == "" ? _action.Description : task.Description()); switch (task.status) { case task_status_type.failure: if (task.error_info.Length > 1 && task.error_info[0] == Failure.HANDLE_INVALID && task.error_info[1] == "task") { GotInvalidHandle(); break; } else { log.WarnFormat("Task {0} failed: {1}", _action.RelatedTask.opaque_ref, task.error_info.Length > 0 ? task.error_info[0] : "Unknown failure"); throw new Failure(new List <string>(task.error_info)); } case task_status_type.success: log.InfoFormat("Task {0} finished successfully", _action.RelatedTask.opaque_ref); taskCompleted = true; _action.Result = task.result; // Work around CA-6597. if (_action.Result != "") { Match m = Regex.Match(_action.Result, "<value>(.*)</value>"); if (m.Success) { _action.Result = m.Groups[1].Value; } } break; case task_status_type.cancelled: log.InfoFormat("Task {0} was cancelled", _action.RelatedTask.opaque_ref); throw new CancelledException(); case task_status_type.cancelling: case task_status_type.pending: break; } }