Introduction

Enzo Server
  Installation
  Quick Start

  Core Features
    Async Calls
    ConnectionStrings
    Edge Cache
    Scheduling
    Views

  Advanced Capabilities
    Change Data Capture

  Administration
    Configuration Settings
    Logins & ACL
    Auditing
    Current Executions
    Linked Server
    SSL

/features/async




ASYNC CALLS


Enzo Server allows you to execute commands without waiting for the results to be returned. This allows your code to continue execution, check for the status of the operation periodically, and access the data once it is available. Unliked a scheduled operation, an async call executes as soon as possible.


See the Scheduling section for information on how to run background operations more than once

Run Async Operation

To run an async operation with Enzo Server, you need to add the __async extension to a valid SQL command. The general format for the __async extension is as follows, where the parameters list are those supported by the handler:

Execute Async Call

EXEC [adapter].[handler]__async 'correlationId', [,parameter1...]

The correlationId a logical identifier allowing you to group background operations; for example you can delete all async operations that have a given correlationId value.

You can execute background operations asynchronously using the _async extension on SELECT statements as well; however this option is not available through a Linked Server. To execute an async request against Enzo Server directly using a SELECT command, use this format:

SELECT * FROM [adapter].[handler]_async 


Read Operation Output

Once the call of a background operation has completed, you can access the output generated by using the _asyncResult handler. This handler requires the _reqUid, which is a unique identifier assigned when the operation is created:

SELECT * FROM adapter._asyncResult WHERE _reqUid='918fb98f-cbe9-4260-88ff-357d1592e13e'

List available result sets

Call the _asyncResultsList handler to obtain the list of available results.

SELECT * FROM adapter._asyncResultsList

This handler takes a few optional parameters to help you filter the information. For example you can list all available outputs given the correlationId:

SELECT * FROM adapter._asyncResultsList WHERE _correlationId='mygroup'

Rerun an async operation

You can execute an async operation manually as many times as you want. To do so, call the _asyncRefresh handler with the operation _reqUid or the correlationId (using a correlationId reruns all the operations that have the same correlation value):

--Rerun a single operation by _reqUid
EXEC adapter._asyncRefresh '918fb98f-cbe9-4260-88ff-357d1592e13e'
--Rerun all operations that belong to the specified collectionId
EXEC adapter._asyncRefresh null, 'mygroup'

Cancel/delete async operation

To delete the cached data set, call the _asyncCancel handler:

--Cancel/delete a single operation by _reqUid
EXEC adapter._asyncCancel '918fb98f-cbe9-4260-88ff-357d1592e13e'
--Cancel/delete all operations that belong to the specified collectionId
EXEC adapter._asyncCancel null, 'mygroup'
--Other way to cancel/delete all operations that belong to the specified collectionId
DELETE FROM adapter._asyncRequest WHERE _reqCorrelationId='mygroup'

Example

Run a background operation

The following code gets data asynchronously, retrieves the cached data, and deletes it.

The code sample provided below runs directly against an Enzo Server. However you will need to replace the _reqUid with the one assigned to you by the __asyncAt handler.


-- This is the SQL command that returns data from SharePoint in real-time that we want to schedule
EXEC sharepoint.getlistitemsex 'US States', 'ID,Title,State Code,Created'

-- Let's run this call asynchronously by adding __async (we specify a null correlationId)
EXEC sharepoint.getlistitemsex__async null, 'US States', 'ID,Title,State Code,Created'

-- The previous method returned a _reqUid:  efd55d0f-17b9-4e06-86cf-eca6df5e3c7e
-- An async call is considered a scheduled operation that is executed just once:
SELECT * FROM sharepoint._asyncScheduled

-- wait a few seconds, and access the cached data set:
SELECT * FROM SharePoint._asyncResult WHERE _reqUid = 'efd55d0f-17b9-4e06-86cf-eca6df5e3c7e'

-- delete the cached data set:
exec SharePoint._asyncCancel 'efd55d0f-17b9-4e06-86cf-eca6df5e3c7e'