Sample code for 30+ languages & platforms
PowerShell

Thread Pool Size

See more Async Examples

Demonstrates how to set the maximum number of threads in Chilkat's thread pool manager. Also demonstrates how to set a thread pool log file for help in diagnosing unexpected problems.

Chilkat PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

$success = $false

# Set the maximum number of threads in the Chilkat thread pool to 12.
# This means that no more than 12 background worker threads will exist simultaneously.
# If more than 12 tasks are queued then some must wait for a worker thread to become free.
# Note: The Chilkat thread pool manager thread is a thread distinct from the
# worker threads.  It starts when the 1st asynchronous task is Run. 
$glob = New-Object Chilkat.Global
$glob.MaxThreads = 12

# Also, the ThreadPoolLogPath can be set to cause the thread pool manager thread to
# keep a log file. This is for the purpose of debugging if unexpected problems occur.
$glob.ThreadPoolLogPath = "/home/users/chilkat/logs/threadPoolLog.txt"

$http1 = New-Object Chilkat.Http
$http2 = New-Object Chilkat.Http
$http3 = New-Object Chilkat.Http

$url1 = "http://www.marcusmiller.com/"
$url2 = "http://www.tromboneshorty.com/"
$url3 = "http://www.jamesmorrison.com/"

# Call the async version of the QuickGetStr method to return a task object.
# The task object is loaded, but is in the Inert state -- meaning it is
# not yet scheduled to run on Chilkat's background thread pool.
$task1 = $http1.QuickGetStrAsync($url1)
if ($http1.LastMethodSuccess -eq $false) {
    $($http1.LastErrorText)
    exit
}

$task2 = $http2.QuickGetStrAsync($url2)
if ($http2.LastMethodSuccess -eq $false) {
    $($http2.LastErrorText)

    exit
}

$task3 = $http3.QuickGetStrAsync($url3)
if ($http3.LastMethodSuccess -eq $false) {
    $($http3.LastErrorText)

    exit
}

# At this point we have 3 task objects, each loaded with a Chilkat method call.
# Note: At this point no background threads are running.  The thread pool manager
# thread is not started -- it will start when the very first task is Run.

# Schedule each task for running on the thread pool.  This changes each task's state
# from Inert to Live. The thread pool manager thread starts with the 1st task queued.
# If the Global.ThreadPoolLogPath property was set, then
# the log file would be created (or appended) at this point.
$success = $task1.Run()
# Assuming success for brevity...
$success = $task2.Run()
$success = $task3.Run()

# The application is now free to do anything else
# while the HTML at the URL's are being downloaded in background threads.

# In this case, we'll just wait for all three tasks to finish.
# All three tasks are running simultaneously in separate background threads.
# We can wait for each in any order.  If Wait is called and the task has already
# finished (or been canceled), then the Wait method returns immediately.
$maxWaitMs = 20000
$success = $task1.Wait($maxWaitMs)
$success = $task2.Wait($maxWaitMs)
$success = $task3.Wait($maxWaitMs)
# Assuming success for brevity...

$err = "Task failed or canceled"
$html1 = $err
$html2 = $err
$html3 = $err

# Now get the HTML downloaded in each task:
if (($task1.StatusInt -eq 7) -and ($task1.TaskSuccess -eq $true)) {
    $html1 = $task1.GetResultString()
}

if (($task2.StatusInt -eq 7) -and ($task2.TaskSuccess -eq $true)) {
    $html2 = $task2.GetResultString()
}

if (($task3.StatusInt -eq 7) -and ($task3.TaskSuccess -eq $true)) {
    $html3 = $task3.GetResultString()
}

$($html1)
$("----")
$($html2)
$("----")
$($html3)
$("----")