For modern .NET, a practical way to queue customer-related background work inside one application process is a bounded Channel<T> consumed by a hosted BackgroundService. Awaiting an enqueue confirms that the item entered the in-memory queue; it does not confirm that the work finished or that it will survive a process failure. Use this pattern when those limits fit your workload, and establish delivery and deployment requirements before relying on it for critical customer operations.
How do I queue background tasks in C#?
Represent each task as asynchronous work that accepts a cancellation token. A bounded channel provides the producer-consumer queue, while a hosted worker reads items and runs them. The example below targets modern .NET with the ASP.NET Core hosting model; it is an in-process pattern, not a durable message broker.
Define the queue contract
This contract makes the important behavior explicit: callers await enqueueing, work observes the worker’s cancellation token, and a full queue applies backpressure rather than discarding an item.
using System.Threading.Channels;
public interface IBackgroundTaskQueue
{
ValueTask QueueAsync(
Func<CancellationToken, ValueTask> workItem,
CancellationToken cancellationToken = default);
ValueTask<Func<CancellationToken, ValueTask>> DequeueAsync(
CancellationToken cancellationToken);
}
public sealed class BackgroundTaskQueue : IBackgroundTaskQueue
{
private readonly Channel<Func<CancellationToken, ValueTask>> _channel;
public BackgroundTaskQueue(int capacity)
{
if (capacity <= 0)
throw new ArgumentOutOfRangeException(nameof(capacity));
_channel = Channel.CreateBounded<Func<CancellationToken, ValueTask>>(
new BoundedChannelOptions(capacity)
{
FullMode = BoundedChannelFullMode.Wait,
SingleReader = true,
SingleWriter = false
});
}
public ValueTask QueueAsync(
Func<CancellationToken, ValueTask> workItem,
CancellationToken cancellationToken = default)
{
ArgumentNullException.ThrowIfNull(workItem);
return _channel.Writer.WriteAsync(workItem, cancellationToken);
}
public ValueTask<Func<CancellationToken, ValueTask>> DequeueAsync(
CancellationToken cancellationToken) =>
_channel.Reader.ReadAsync(cancellationToken);
}
QueueAsync completes when the channel accepts the item. If the bounded queue is full, its asynchronous write waits for space; cancellation of the caller’s token can cancel that wait. Once accepted, the item is not automatically withdrawn if the original request later ends.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problems#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Consume work in a hosted service
The host starts and stops the worker. The worker passes its stopping token to each item and to the read operation. A scoped dependency, such as a database context, should be resolved within a scope for the work item rather than captured by the long-lived worker.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
public sealed class QueuedHostedService : BackgroundService
{
private readonly IBackgroundTaskQueue _queue;
private readonly IServiceScopeFactory _scopeFactory;
private readonly ILogger<QueuedHostedService> _logger;
public QueuedHostedService(
IBackgroundTaskQueue queue,
IServiceScopeFactory scopeFactory,
ILogger<QueuedHostedService> logger)
{
_queue = queue;
_scopeFactory = scopeFactory;
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
Func<CancellationToken, ValueTask> workItem;
try
{
workItem = await _queue.DequeueAsync(stoppingToken);
}
catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
{
break;
}
try
{
await workItem(stoppingToken);
}
catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
{
break;
}
catch (Exception ex)
{
_logger.LogError(ex, "Queued background work failed.");
}
}
}
}
Register the queue as a singleton so request handlers and the worker use the same channel. Register the worker as a hosted service. Choose the capacity for the application’s expected load and concurrent access; there is no universal correct value.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
builder.Services.AddSingleton<IBackgroundTaskQueue>(
_ => new BackgroundTaskQueue(capacity: 100));
builder.Services.AddHostedService<QueuedHostedService>();
The value 100 here is only an example configuration, not a Microsoft recommendation or a measured capacity. A customer operation can enqueue work like this:
await queue.QueueAsync(async cancellationToken =>
{
await using var scope = scopeFactory.CreateAsyncScope();
var processor = scope.ServiceProvider.GetRequiredService<ICustomerWorkProcessor>();
await processor.ProcessAsync(customerId, cancellationToken);
}, requestAborted);
In this example, cancellation before enqueue completes can prevent acceptance. After acceptance, the worker supplies its own stopping token to the callback; the request token does not govern processing. Keep the callback asynchronous and pass its token to cancellable operations. The logging catch is an example failure policy, not a retry mechanism: production code must decide whether failed work should be recorded, retried, surfaced, or otherwise handled.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
What happens when the customer queue is full?
A bounded channel sets a limit on pending items. Its full mode determines whether writers wait or items are dropped. Microsoft documents Wait as the default full mode: WriteAsync waits for capacity, while TryWrite returns false immediately when no space is available. The other modes intentionally discard work, so select them only when the corresponding loss is acceptable.
| Choice | Behavior | Implication for customer work |
|---|---|---|
Bounded, Wait |
Limits pending items; asynchronous writers wait for room. | Applies backpressure, but callers may wait or cancel before enqueue succeeds. |
| Bounded, drop newest | Drops the newest queued item when capacity is reached. | Use only if losing that pending item is explicitly acceptable. |
| Bounded, drop oldest | Drops the oldest queued item when capacity is reached. | Use only if replacing older pending work is explicitly acceptable. |
| Bounded, drop write | Drops the item being written when capacity is reached. | Use only if losing the newly submitted item is explicitly acceptable. |
| Unbounded | Places no fixed capacity limit on pending items. | Work can accumulate without a queue capacity limit if producers outpace the worker. |
These policies are not interchangeable. A customer notification that may be safely omitted has different loss consequences from an order update or other operation that must be accounted for. The queue policy should follow the workflow’s actual requirements, not convenience.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
What does an in-process queue guarantee—and what does it not?
A Channel<T> is useful for coordinating producers and consumers within an application process. The cited .NET guidance demonstrates this arrangement, but does not establish persistence across process failure or coordination between multiple application instances. Do not infer durable delivery, exactly-once processing, or cross-instance behavior from the channel itself.
Hosted services participate in host shutdown. The host signals cancellation, so work should observe the token and stop cooperatively. Graceful shutdown is not assured after an abrupt process failure; an in-memory pending item can therefore be lost if the process ends before it runs. Before using this design for production-critical customer work, decide whether your system needs recovery after a restart, shared work across instances, retries, or an auditable record of completion. If so, evaluate a persistence or messaging design against those needs rather than treating this in-memory sample as sufficient.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
How should I choose queue capacity and overload behavior?
Capacity is an application design choice, not a standard C# setting. Base it on expected arrival rates, the time work takes, the number of concurrent publishers, and how much delay is acceptable. A bounded queue prevents unlimited pending-item growth, but it cannot make a slow consumer keep up with a sustained faster producer. With Wait, that mismatch moves pressure back to publishers; with a drop mode, it becomes intentional loss. An unbounded queue avoids a fixed full threshold but can continue accumulating work.
For customer operations that cannot be silently discarded, use an explicit wait or rejection/response policy and define how the caller learns that enqueueing did not complete. Do not switch to a drop mode merely to avoid a full queue unless losing that specific class of work is part of the business rules.
Which C# background queue API applies to your runtime?
HostingEnvironment.QueueBackgroundWorkItem is a System.Web.Hosting API documented for .NET Framework 4.8.1; it schedules work independently of a request. It is not the general modern .NET queue-service pattern. For current .NET applications using the generic host or ASP.NET Core, Microsoft’s queue-service tutorial demonstrates a custom queue abstraction backed by Channels and consumed by a hosted worker.
Deployment decisions to settle before relying on the queue
- Work meaning: define what one item represents and whether duplicate submissions are possible.
- Acceptance: decide what the caller should do while a bounded queue is full, and what it means for enqueueing to have completed.
- Cancellation: distinguish cancellation while waiting to enqueue from cancellation during worker shutdown or item execution.
- Failure handling: choose whether a failed item is retried, recorded, reported, or intentionally abandoned.
- Reliability: determine whether customer work must survive process loss and whether multiple application instances must share work.
- Data handling: decide what customer data an item carries, how long it remains in memory, and what safeguards the workflow requires.
- Load and delay: estimate expected volume and concurrent access, set a capacity, and monitor whether producers routinely wait or work accumulates.
Microsoft’s implementation starting point is Create a Queue Service – .NET. The hosting lifecycle, shutdown, and scoped-service patterns are covered in Background tasks with hosted services in ASP.NET Core (.NET 10); channel capacity and full modes are documented in Channels – .NET. The legacy API reference is HostingEnvironment.QueueBackgroundWorkItem Method (.NET Framework 4.8.1).
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

