ArcGIS Pro 2.7 API Reference Guide
SearchAndSubscribe Method (StreamLayer)
Example 

ArcGIS.Desktop.Mapping Namespace > StreamLayer Class : SearchAndSubscribe Method
A null query filter will search all rows and all rows that become available will be retrieved.
If set to true, all the entries in ArcGIS.Core.Data.Realtime.RealtimeCursor will reference the most current row returned by ArcGIS.Core.Data.Realtime.RealtimeCursor.Current. To ensure all the entries in ArcGIS.Core.Data.Realtime.RealtimeCursor remain unique, set useRecyclingCursor to false. The default is true.
Searches the table for existing rows using the query criteria and then subscribes to receive row events. This method must be called on the MCT. Use QueuedTask.Run.
Syntax
Public Function SearchAndSubscribe( _
   ByVal queryFilter As QueryFilter, _
   ByVal useRecyclingCursor As Boolean _
) As RealtimeCursor

Parameters

queryFilter
A null query filter will search all rows and all rows that become available will be retrieved.
useRecyclingCursor
If set to true, all the entries in ArcGIS.Core.Data.Realtime.RealtimeCursor will reference the most current row returned by ArcGIS.Core.Data.Realtime.RealtimeCursor.Current. To ensure all the entries in ArcGIS.Core.Data.Realtime.RealtimeCursor remain unique, set useRecyclingCursor to false. The default is true.

Return Value

A ArcGIS.Core.Data.Realtime.RealtimeCursor that encapsulates the retrieved rows, as well as provides facilities to wait for new row events.
Exceptions
ExceptionDescription
This method or property must be called within the lambda passed to QueuedTask.Run.
Stream Layer was disconnected from its underlying feature class.
A geodatabase-related exception has occurred.
Remarks
This operation is atomic. It is guaranteed that the returned ArcGIS.Core.Data.Realtime.RealtimeCursor will correctly reflect any insert or delete operations that occured at any time during the exection of this method. Use ArcGIS.Core.Data.Realtime.RealtimeFeatureClass.SearchAndSubscribe to search and subscribe on any thread. If no query filter is set, all pre-existing rows will be searched and all rows that become available after subscribing will be retrieved.
Example
await QueuedTask.Run(async () =>
{
  //query filter can be null to search and retrieve all rows
  //true means recycling cursor
  using (var rc = streamLayer.SearchAndSubscribe(qfilter, true))
  {
    //waiting for new features to be streamed
    //default is no cancellation
    while (await rc.WaitForRowsAsync())
    {
      while (rc.MoveNext())
      {
        using (var row = rc.Current)
        {
          //determine the origin of the row event
          switch (row.GetRowSource())
          {
            case RealtimeRowSource.PreExisting:
              //pre-existing row at the time of subscribe
              continue;
            case RealtimeRowSource.EventInsert:
              //row was inserted after subscribe
              continue;
            case RealtimeRowSource.EventDelete:
              //row was deleted after subscribe
              continue;
          }
        }
      }
    }
  }//row cursor is disposed. row cursor is unsubscribed

  //....or....
  //Use the feature class instead of the layer
  using(var rfc = streamLayer.GetFeatureClass())
  {
    //non-recycling cursor - 2nd param "false"
    using(var rc = rfc.SearchAndSubscribe(qfilter, false))
    {
      //waiting for new features to be streamed
      //default is no cancellation
      while (await rc.WaitForRowsAsync())
      {
        //etc
      }
    }
  }
});
Requirements

Target Platforms: Windows 10, Windows 8.1

See Also

Reference

StreamLayer Class
StreamLayer Members