Skip to main content

SF-0346 · Concept · Easy

What are different asynchronous features available in Salesforce?

✓ Verified by Vikas Singhal · Last reviewed 5/17/2026 · Updated for Spring '26

Salesforce gives you four core asynchronous Apex flavours@future, Queueable, Batch, and Schedulable — plus a few event-driven options (Platform Events, Change Data Capture) that are also async by design. Each tool exists because a different shape of work doesn’t fit inside a single synchronous transaction.

The four core Apex flavours

FlavourShape of workPick when
@futureFire-and-forget, primitive argsOne quick callout, small task; legacy code
QueueableSame as @future plus chaining, complex types, JobId trackingAnything you’d use @future for in a new project
Batch ApexProcess large datasets in 200-record chunksMore than ~10,000 records, or work that exceeds sync governor limits
SchedulableRun on a cron scheduleRecurring jobs (nightly cleanup, weekly reports)

What each one actually does

@future — A static method marked @future is queued and runs in a separate transaction. Accepts only primitives, Ids, and collections of primitives. No chaining, no monitoring, no return value. The original async mechanism, kept for backward compatibility.

Queueable — A class implementing Queueable runs asynchronously when you call System.enqueueJob(new MyJob(...)). Accepts complex types (sObjects, custom classes). Returns a JobId for tracking. Can chain another Queueable. Supports callouts via Database.AllowsCallouts.

Batch Apex — A class implementing Database.Batchable<sObject> with three methods: start (returns the records or QueryLocator), execute (processes a chunk, default 200 records), and finish (called once when all chunks complete). Handles up to 50 million records per job.

Schedulable — A class implementing Schedulable with one method, execute(SchedulableContext). Scheduled via System.schedule(name, cronExp, instance) or via the Setup UI.

The event-driven async options

Beyond the four flavours, Salesforce has several event-driven async mechanisms:

  • Platform Events — Publish/subscribe message bus. An Apex trigger can fire on the event consumer side, async to the publisher’s transaction.
  • Change Data Capture (CDC) — Salesforce automatically publishes events on record changes. Subscribers receive them async.
  • Async SOQL — Deprecated for most use cases; replaced by Big Object queries. Was used for large-volume queries against Big Objects.
  • Apex Continuation — Lets a Visualforce or Aura controller make long-running callouts without blocking. (LWC has a different async pattern via @wire and Promises.)

The decision tree

Need to run code outside the user's transaction?
├─ One quick callout, no chaining, no monitoring?
│    → @future (legacy) or Queueable (modern)
├─ Need to process > 10,000 records?
│    → Batch Apex
├─ Need to run on a clock?
│    → Schedulable, often calling a Batch or Queueable
└─ Need pub/sub between systems?
     → Platform Events or CDC

Common interview follow-ups

  • Which one should I use by default in 2026? — Queueable. It’s the modern general-purpose tool.
  • Can a Schedulable kick off a Batch? — Yes. The most common pattern: a Schedulable that runs at 2 AM and calls Database.executeBatch(new MyBatch()).
  • Are Platform Events Apex async? — Platform Events themselves are infrastructure. Apex triggers on them run async to the publisher.

Verified against: Apex Developer Guide — Asynchronous Apex. Last reviewed 2026-05-17 for Spring ‘26.