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 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 EXEC sp_OASetProperty @http, 'ReadTimeout', 15 -- Wait a max time of 2 seconds for the task. -- In this example, it's an unreasonably small amount of time, -- which means the task will get cancelled. DECLARE @waitMaxMs int SELECT @waitMaxMs = 2000 -- We're just going to download for 2 seconds and then cancel. -- Substitute your own URL with a large enough file for testing.. DECLARE @downloadUrl nvarchar(4000) SELECT @downloadUrl = 'http://download.mono-project.com/archive/4.6.1/windows-installer/mono-4.6.1.5-gtksharp-2.12.38-win32-0.msi' DECLARE @task int EXEC sp_OAMethod @http, 'DownloadAsync', @task OUT, @downloadUrl, 'qa_output/mono.msi' EXEC sp_OAMethod @task, 'Run', @success OUT -- Wait a maximum of waitMaxMs for the task (i.e. the HTTP download) to complete. -- The Wait method returns when the task has been canceled, aborted, or completed, or when the max allotted time has passed. EXEC sp_OAMethod @task, 'Wait', @success OUT, @waitMaxMs -- At this point, the download 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 download 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 Download completed -- with success or failure. Find out which... EXEC sp_OAMethod @task, 'GetResultBool', @success OUT IF @success = 1 BEGIN PRINT 'Download successful!' END ELSE BEGIN PRINT 'Download 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.