public ReservationStatus TryReserve(TimeSpan timeout, out Job job) {
var response = Exec(Request.Create(RequestCommand.ReserveWithTimeout)
.AppendArgument(timeout)
.ExpectStatuses(ResponseStatus.DeadlineSoon | ResponseStatus.TimedOut | ResponseStatus.Reserved));
switch(response.Status) {
case ResponseStatus.Reserved:
job = new Job(uint.Parse(response.Arguments[0]), response.Data, long.Parse(response.Arguments[1]));
break;
default:
job = null;
break;
}
return response.Status.ToReservationStatus();
}