Immutable data is a good fit for values passed across concurrency boundaries.

Pass immutable data

sendable_values.swift
struct Job: Sendable {
    let name: String
    let count: Int
}

func summarize(_ job: Job) async -> String {
    return "\(job.name):\(job.count)"
}

let count = 
let job = Job(name: "trace", count: count)
let message = await summarize(job)

print(message)
struct Job: Sendable {
    let name: String
    let count: Int
}

func summarize(_ job: Job) async -> String {
    return "\(job.name):\(job.count)"
}

let count = 
let job = Job(name: "trace", count: count)
let message = await summarize(job)

print(message)
struct Job: Sendable {
    let name: String
    let count: Int
}

func summarize(_ job: Job) async -> String {
    return "\(job.name):\(job.count)"
}

let count = 
let job = Job(name: "trace", count: count)
let message = await summarize(job)

print(message)
sendable value A simple `Sendable` struct communicates that its stored values are safe to pass between concurrent tasks.