SwiftUI's .task modifier handles async operations tied to view lifecycle. The task starts when the view appears and cancels automatically when it disappears, preventing memory leaks. I use .task for data fetching, subscriptions, and long-running operations. For manual control, I track task handles with @State var task: Task<Void, Never>? and cancel explicitly. The .task(id:) variant re-runs when dependencies change, perfect for search queries. Structured concurrency with async let enables parallel operations. Task priorities guide scheduling—.userInitiated for UI-critical work, .background for non-urgent tasks. .refreshable creates pull-to-refresh with async support.