DEV Community

Cover image for Intelligent Request Queue Management in WebForms Core 2
Elanat Framework
Elanat Framework

Posted on

Intelligent Request Queue Management in WebForms Core 2

Modern web applications rely heavily on client-side state, but this state can quickly fall apart when requests arrive out of order or when users interact with the interface faster than the network can respond. High latency—especially above 150 ms—often leads to symptoms such as input lag, characters appearing out of sequence, or form controls changing focus unexpectedly. Users frequently describe this behavior as “input confusion”, a sign that the UI logic is no longer aligned with the underlying state.

These issues all stem from the same root cause: asynchronous operations without coordination.


When Latency Becomes a UI Problem

Unpredictable response times introduce several failure scenarios in client-side state management. The following situations are particularly prone to UI disruption:

1. Race conditions and overlapping requests

When multiple state-dependent requests are issued in parallel, the server may return responses in a different order than they were sent. This can cause:

  • stale data overwriting fresh data
  • UI updates executing at the wrong time
  • controls resetting or switching unexpectedly

2. Missing synchronization across tabs or devices

If a user interacts with your application in two different browser tabs or on multiple devices:

  • one tab may update the state
  • the other tab may apply an older or conflicting update

Without coordination, the user experiences inconsistent or lost data.

3. Incorrect handling of optimistic updates

Optimistic UI improves responsiveness by updating the interface before the server confirms the change.
But if the server later fails:

  • the UI may keep incorrect data
  • the rollback process may be incomplete or skipped

4. Hard-to-reproduce debugging scenarios

Async state, latency variation, and concurrency create bugs that:

  • cannot be reproduced in development
  • do not appear in unit tests
  • only surface under real-world timing conditions

5. Faulty retry or error handling

Retrying a failed request without sequencing rules can:

  • reapply old state
  • trigger duplicated operations
  • push the UI into an unstable or contradictory state

Introducing the Request Queue in WebForms Core v2

WebForms Core v2 introduces an integrated request queue manager, ensuring that incoming actions are processed strictly in order and never overlap. Every new piece of data waits in the queue until all previous actions have completed.

No concurrency. No out-of-order updates. No state corruption.

This mechanism is built into the framework itself—no extra libraries or middleware required.

With vs. Without a Queue

Scenario Behavior
Without a queue multiple requests execute simultaneously → race conditions & unpredictable UI
With a queue one request at a time → consistent, ordered, deterministic behavior

Request queues are a well-established synchronization technique; other ecosystems solve this through tools like Redux-Saga, React Query, SWR, RxJS, etc. WebForms Core v2 brings this logic natively to WebForms applications.


Queue Configuration

WebFormsOptions.UseQueue = true;
WebFormsOptions.UseQueueForWebFormsValue = true;
WebFormsOptions.UseDebounceDelay = true;
WebFormsOptions.QueueDebounceDelay = 200;
Enter fullscreen mode Exit fullscreen mode

Option overview

UseQueue

Enables the global request queue.

UseQueueForWebFormsValue

Queues responses generated by Action Controls, ensuring their operations execute sequentially.

UseDebounceDelay

Prevents repeated user actions (like rapid clicks) from generating multiple requests.

QueueDebounceDelay

Defines the minimum time (in milliseconds) between requests.
Lower values increase responsiveness but reduce protection against burst requests.

Dynamic queue control

WebForms Core v2 also allows enabling or disabling queue behavior at runtime:

form.SetEnableQueueEvent("<body>", HtmlEvent.OnLoad, false);
Enter fullscreen mode Exit fullscreen mode

This makes it possible to:

  • disable queueing during fast UI operations
  • re-enable it for state-changing or sensitive actions

Why the Request Queue Matters

1. Eliminates race conditions

No matter how fast the user interacts or how slow the network is, operations:

  • arrive in the correct order
  • update state consistently
  • never overlap

2. Blocks unintentional repeated requests

Rapid clicks or rapid input events normally trigger multiple submissions. With the queue:

  • duplicate requests are ignored
  • only meaningful state transitions are processed

3. Predictable asynchronous behavior

The queue creates a deterministic, top-to-bottom execution flow, preventing:

  • late responses from overriding newer data
  • UI elements entering contradictory states

4. Eliminates intermittent UI errors

Common “async UI chaos” disappears, such as:

  • multiple enable/disable cycles
  • input fields changing unexpectedly
  • state reverting due to old responses
  • flicker during rapid updates

5. Ideal for WebSocket environments

WebSockets can deliver responses:

  • too late
  • too quickly
  • or in bursts

The queue normalizes these events, ensuring that WebSocket and HTTP operations never interfere with each other.

6. Clean integration with Loader behavior

Because only one action runs at a time:

  • loader visibility becomes consistent
  • UI flicker is eliminated
  • user feedback is predictable

7. Unified control in complex systems

In applications using a mix of:

  • full postbacks
  • AJAX updates
  • WebSocket messages
  • triggered events

the queue provides a single, centralized execution pipeline.

8. Prevents server overload

Burst requests (especially over WebSocket) are serialized before reaching the server, reducing:

  • bandwidth waste
  • CPU spikes
  • malformed or overlapping operations

Debounce: Controlling User-Generated Floods

WebForms Core v2 includes an integrated debounce system. Debounce waits for a short pause in activity before executing a function.

If the same event fires many times in a row, only the final call is executed.

Benefits

  • Dramatically fewer requests during typing, scrolling, resizing
  • Reduced server load and bandwidth usage
  • Less DOM thrashing and smoother rendering
  • Better handling of double-click or rapid-tap behavior
  • Prevents duplicate form submissions
  • Stabilizes WebSocket messaging

Debounce makes user behavior predictable and prevents the UI from executing expensive operations at every minor interaction.


The New Loader System

The Loader in WebForms Core v2 is more than a visual indicator—it also acts as a temporary interaction lock while a request is being processed.

WebFormsOptions.UseLoader = true;
WebFormsOptions.HideLoaderTimeout = 5000;
WebFormsOptions.HideLoaderWhenUpload = true;
WebFormsOptions.HideLoaderAfterUploaded = 1024 * 1024;
Enter fullscreen mode Exit fullscreen mode

Key capabilities

  • Prevents repeated clicks while an operation is running
  • Automatically hides after a configured timeout
  • Suppresses loader display during file uploads
  • Adapts behavior based on file size

Together with the queue manager, the Loader ensures that the UI remains stable and visually consistent throughout asynchronous operations.


Pre Runner Queueing

A Pre Runner defines special execution behavior for a command—such as running it with a delay or repeating it on an interval.
WebForms Core v2 introduces a unified method, cb_SetPreRunnerQueue, which manages Pre Runner tasks within the same request queue pipeline.

This replaces older mechanisms and provides:

  • consistent scheduling
  • predictable execution
  • centralized control

Conclusion

Asynchronous systems break down when state updates arrive unpredictably or concurrently. High latency magnifies these failures, leading to corrupted UI state, inconsistent behavior, and difficult-to-reproduce bugs.

WebForms Core v2 provides a complete solution by integrating:

  • a Request Queue Manager
  • built-in Debounce
  • an intelligent Loader system
  • Pre Runner scheduling
  • dynamic queue enable/disable controls
  • full synchronization across all request types

Together, these features create a stable, deterministic, and latency-resilient client-side architecture—even under heavy interaction or high ping times.

WebForms Core v2 transforms asynchronous UI behavior from unpredictable to fully synchronized and reliable.

Top comments (0)