Query a Job
Track and manage jobs via sdkClient.Jobs.Query.
Query by ID
var jobId = Guid.Parse("12345678-1234-1234-1234-1234567890ab");
var jobResult = await sdkClient.Jobs.Query.GetByIdAsync(jobId);
if (jobResult is Result<JobStatus>.Success jobStatus)
{
var job = jobStatus.Data;
Console.WriteLine($"Job ID: {job.JobId}");
if (job.Scheduled)
{
Console.WriteLine("Status: In Progress");
Console.WriteLine($"Queue Position: {job.Position}");
}
else if (job.LastEvent?.Type == JobEventType.Succeeded)
{
Console.WriteLine("Status: Succeeded");
}
else if (job.LastEvent?.Type == JobEventType.Failed)
{
Console.WriteLine("Status: Failed");
}
}
Query by Token
var batchToken = "your-batch-token-here";
var tokenResult = await sdkClient.Jobs.Query.GetByTokenAsync(batchToken);
if (tokenResult is Result<JobStatusCollection>.Success tokenSuccess)
{
foreach (var job in tokenSuccess.Data.JobsList)
{
var status = job.Scheduled ? "In Progress" : job.LastEvent?.Type.ToString() ?? "Unknown";
Console.WriteLine($"Job {job.JobId}: {status}");
}
}
Query with Options
var detailedResult = await sdkClient.Jobs.Query
.WithDetailed() // Include original job specifications
.WithWait() // Wait for jobs to complete (up to ~10 minutes)
.GetByTokenAsync(batchToken);
Filter by Properties
var filteredResult = await sdkClient.Jobs.Query
.WhereProperty("userId", "12345")
.WhereProperty("campaign", "winter-2026")
.ExecuteAsync();
Cancel Job
var jobToCancel = Guid.Parse("12345678-1234-1234-1234-1234567890ab");
var cancelResult = await sdkClient.Jobs.Query.CancelAsync(jobToCancel);
if (cancelResult is Result<Unit>.Success)
{
Console.WriteLine("Job cancelled successfully");
}
Cancel Batch
var batchToCancel = "batch-token-to-cancel";
var batchCancelResult = await sdkClient.Jobs.Query.CancelAsync(batchToCancel);
Taint Job
var jobToTaint = Guid.Parse("12345678-1234-1234-1234-1234567890ab");
await sdkClient.Jobs.Query.TaintAsync(jobToTaint);