Thread:
A Thread is a low-level OS-managed unit of execution.
Key characteristics:
Thread t = new Thread(() => DoWork());
t.Start();
Thread t = new Thread(() => DoWork());
t.Start();
Key characteristics:
- Directly managed by the operating system
- Has its own stack and execution context
- Runs independently
Thread t = new Thread(() => DoWork());
t.Start();
Thread t = new Thread(() => DoWork());
t.Start();
Downsides:
- Expensive to create and destroy
- Harder to manage (synchronization, lifecycle)
- Can lead to performance issues if overused
Task
A Task is a high-level abstraction for asynchronous work, built on top of threads.
Key characteristics:
- Part of the Task Parallel Library (TPL)
- Uses thread pool threads internally
- Easier to manage and compose
- Supports async/await
Task.Run(() => DoWork());
Example:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Start");
await DoWorkAsync();
Console.WriteLine("End");
}
static async Task DoWorkAsync()
{
Console.WriteLine("Working...");
// Simulate a delay (like API call or DB query)
await Task.Delay(2000);
Console.WriteLine("Work completed");
}
}
Key Differences
Feature Thread Task
Level Low-level (OS) High-level (.NET abstraction)
Management Manual Managed by runtime
Performance Heavyweight Lightweight
Thread Pool No (manual control) Yes (uses thread pool)
Async support No built-in Yes (async/await)
Error handling Harder Easier (try/catch, await)
Simple Example
Thread:
new Thread(() => Console.WriteLine("Hello from Thread")).Start();
Task:
await Task.Run(() => Console.WriteLine("Hello from Task"));
Real-World Analogy
- Thread = Hiring a full-time worker
- Task = Assigning a job to a worker pool
You don’t care who does the job (Task), just that it gets done efficiently.
When to Use What?
Use Task (Recommended)
- Most modern apps
- Async operations (I/O, APIs, DB calls)
- Parallel processing
Use Thread (Rare cases)
- Need full control over execution
- Long-running dedicated background work
- Specialized scenarios (e.g., real-time systems)
Key Takeaway
- Thread = execution unit
- Task = work abstraction
In modern .NET, you almost always prefer Task over Thread.
No comments:
Post a Comment