VBScript async Property
last modified April 9, 2025
The async
property in VBScript controls whether operations should
execute asynchronously. It's commonly used with XMLHTTP requests to enable
non-blocking execution. When set to True, scripts can continue running while
waiting for operations to complete. This property is essential for responsive
script design.
async
is particularly useful for network operations that may take
time. It prevents script freezing during long-running tasks. This tutorial
covers async
with practical examples to demonstrate its usage in
various scenarios.
async Property Overview
The async
property is a Boolean value that determines execution
mode. True enables asynchronous operation, while False forces synchronous
behavior. It's available on objects like XMLHTTP and FileSystemObject in
VBScript.
Key features include non-blocking execution and event-driven programming. Asynchronous mode requires proper event handling for completion. Understanding this property helps create efficient scripts that don't freeze during operations.
Basic Asynchronous XMLHTTP Request
This example demonstrates a simple asynchronous XMLHTTP request. The script
fetches data from a URL without blocking execution. The async
property is set to True for non-blocking behavior.
Set xmlhttp = CreateObject("MSXML2.XMLHTTP") xmlhttp.async = True xmlhttp.onreadystatechange = GetRef("HandleResponse") xmlhttp.open "GET", "https://example.com/api/data", True xmlhttp.send Sub HandleResponse() If xmlhttp.readyState = 4 Then If xmlhttp.status = 200 Then WScript.Echo xmlhttp.responseText End If End If End Sub ' Keep script running while waiting for response While xmlhttp.readyState <> 4 WScript.Sleep 100 Wend
The script creates an XMLHTTP object and sets async
to True. It
registers a callback for state changes. The request executes in the background
while the script continues. The loop keeps the script alive until completion.
Synchronous vs Asynchronous Comparison
This example compares synchronous and asynchronous request behavior. It shows how
async
affects script execution flow. The synchronous version blocks
until completion, while asynchronous allows continued execution.
' Synchronous request Set syncHttp = CreateObject("MSXML2.XMLHTTP") syncHttp.async = False syncHttp.open "GET", "https://example.com/api", False syncHttp.send WScript.Echo "Sync complete: " & syncHttp.status ' Asynchronous request Set asyncHttp = CreateObject("MSXML2.XMLHTTP") asyncHttp.async = True asyncHttp.onreadystatechange = GetRef("AsyncComplete") asyncHttp.open "GET", "https://example.com/api", True asyncHttp.send WScript.Echo "Async started (script continues)" Sub AsyncComplete() If asyncHttp.readyState = 4 Then WScript.Echo "Async complete: " & asyncHttp.status End If End Sub ' Script continues executing here WScript.Sleep 2000
The synchronous request blocks until completion before echoing. The asynchronous version echoes immediately after starting. The callback handles completion notification. This demonstrates the non-blocking advantage of async mode.
Multiple Concurrent Async Requests
async
enables sending multiple requests simultaneously. This example
shows how to manage several concurrent operations. Each request has its own
callback for individual completion handling.
Set req1 = CreateObject("MSXML2.XMLHTTP") Set req2 = CreateObject("MSXML2.XMLHTTP") req1.async = True req2.async = True req1.onreadystatechange = GetRef("Req1Complete") req2.onreadystatechange = GetRef("Req2Complete") req1.open "GET", "https://example.com/api1", True req2.open "GET", "https://example.com/api2", True req1.send req2.send Sub Req1Complete() If req1.readyState = 4 Then WScript.Echo "Request 1 completed" End If End Sub Sub Req2Complete() If req2.readyState = 4 Then WScript.Echo "Request 2 completed" End If End Sub ' Wait for both requests While req1.readyState <> 4 Or req2.readyState <> 4 WScript.Sleep 100 Wend
Two XMLHTTP objects are created with async set to True. Each has its own callback handler. Both requests run concurrently. The script waits for both to complete before exiting. This pattern is useful for parallel operations.
Error Handling in Async Operations
Asynchronous operations require proper error handling. This example demonstrates error management in async requests. It includes timeout handling and status code checking for robust operation.
Set xmlhttp = CreateObject("MSXML2.XMLHTTP") xmlhttp.async = True startTime = Timer timeout = 5 ' seconds xmlhttp.onreadystatechange = GetRef("HandleResponse") xmlhttp.open "GET", "https://example.com/unreliable", True xmlhttp.send Sub HandleResponse() If xmlhttp.readyState = 4 Then If xmlhttp.status = 200 Then WScript.Echo "Success: " & xmlhttp.responseText Else WScript.Echo "Error: " & xmlhttp.status & " - " & xmlhttp.statusText End If End If End Sub ' Timeout handling While xmlhttp.readyState <> 4 If Timer - startTime > timeout Then xmlhttp.abort WScript.Echo "Request timed out" Exit While End If WScript.Sleep 100 Wend
The script implements a timeout mechanism for the async request. The callback checks both readyState and status. If the operation takes too long, it's aborted. This prevents indefinite waiting for failed requests.
Async File Operations with FileSystemObject
While FileSystemObject doesn't natively support async, we can simulate async behavior. This example shows how to implement non-blocking file operations. It uses a wrapper approach to achieve async-like functionality.
Set fso = CreateObject("Scripting.FileSystemObject") Set shell = CreateObject("WScript.Shell") ' Simulate async file copy Sub AsyncCopyFile(source, dest, callback) shell.Run "cmd /c copy """ & source & """ """ & dest & """", 0, False callback() End Sub Sub OnCopyComplete() WScript.Echo "File copy completed (simulated async)" End Sub ' Usage AsyncCopyFile "C:\temp\source.txt", "C:\temp\dest.txt", GetRef("OnCopyComplete") ' Script continues while copy runs in background WScript.Echo "Script continues execution..." WScript.Sleep 2000
The script simulates async file operations using shell execution. The main script continues while the operation runs in parallel. A callback notifies completion. This pattern can be extended to other file operations.
Source
In this article, we have explored the async
property in VBScript,
covering its usage and practical applications. From basic requests to error
handling and simulated file operations, these examples demonstrate asynchronous
programming techniques. With this knowledge, you can create more responsive
VBScript applications.
Author
List all VBScript tutorials.