Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Cancel HTTP Get Async Task if not Completed after a Max TimeDemonstrates how to wait a maximum amount of time for an asynchronous task to completed. If not completed in the allotted amount of time, the task is cancelled.
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) -- This example requires the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. DECLARE @success int DECLARE @http int -- Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- Set some timeouts, in seconds: EXEC sp_OASetProperty @http, 'ConnectTimeout', 15 -- ReadTimeout specifies the max number of seconds that must elapse when no additional data is received before -- timing out. For example, if a server sends a 300 byte response at the rate of 1 byte per second, then -- ReadTimeout would never cause a timeout because there is never a 15 second interval when nothing arrives. EXEC sp_OASetProperty @http, 'ReadTimeout', 15 DECLARE @url nvarchar(4000) SELECT @url = 'https://your-url.com/something' DECLARE @task int EXEC sp_OAMethod @http, 'QuickGetStrAsync', @task OUT, @url EXEC sp_OAMethod @task, 'Run', @success OUT -- Wait a maximum of waitMaxMs for the task (i.e. the HTTP GET) to complete. -- The Wait method returns when the task has been canceled, aborted, or completed, or when the max allotted time has passed. DECLARE @waitMaxMs int SELECT @waitMaxMs = 20000 EXEC sp_OAMethod @task, 'Wait', @success OUT, @waitMaxMs -- At this point, the GET may or may not have completed. -- Rather than checking the Task status, we can call task.Cancel because -- if the Task is no longer running (because it already completed, was canceled or aborted), then the -- call to Cancel is a NO-OP (meaning it does nothing and the Task's status is unaffected). -- Also, task.Cancel returns 1 if the task was in the "queued" or "running" state and was canceled or aborted. -- The method returns 0 if the task has any other status. DECLARE @wasCanceled int EXEC sp_OAMethod @task, 'Cancel', @wasCanceled OUT IF @wasCanceled = 1 BEGIN PRINT 'The HTTP GET took too long and was canceled.' END ELSE BEGIN -- Find out what happened. EXEC sp_OAGetProperty @task, 'StatusInt', @iTmp0 OUT IF @iTmp0 = 7 BEGIN -- The task completed, which means the background thread's call to QuickGetStr completed -- with success or failure. Find out which... EXEC sp_OAGetProperty @task, 'TaskSuccess', @iTmp0 OUT IF @iTmp0 = 1 BEGIN -- Get the string response for the call to QuickGetStr (which happened in Chilkat's background thread). DECLARE @responseStr nvarchar(4000) EXEC sp_OAMethod @task, 'GetResultString', @responseStr OUT PRINT @responseStr PRINT 'HTTP GET successful!' END ELSE BEGIN PRINT 'HTTP GET failed prior to waitMaxMs...' EXEC sp_OAGetProperty @task, 'ResultErrorText', @sTmp0 OUT PRINT @sTmp0 END END ELSE BEGIN -- The task must've been canceled or aborted by some other means.. EXEC sp_OAGetProperty @task, 'Status', @sTmp0 OUT PRINT 'Task did not complete. Final status: ' + @sTmp0 END END EXEC @hr = sp_OADestroy @task EXEC @hr = sp_OADestroy @http END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.