/// <summary> /// <para> /// Sends a heartbeat with optional details to Cadence. /// </para> /// <note> /// <b>IMPORTANT:</b> Heartbeats are not supported for local activities. /// </note> /// </summary> /// <param name="details">Optional heartbeart details.</param> /// <returns>The tracking <see cref="System.Threading.Tasks.Task"/>.</returns> /// <exception cref="InvalidOperationException">Thrown for local activity executions.</exception> /// <remarks> /// <para> /// Long running activities need to send periodic heartbeats back to /// Cadence to prove that the activity is still alive. This can also /// be used by activities to implement checkpoints or record other /// details. This method sends a heartbeat with optional details /// encoded as a byte array. /// </para> /// <note> /// The maximum allowed time period between heartbeats is specified in /// <see cref="ActivityOptions"/> when activities are executed and it's /// also possible to enable automatic heartbeats sent by the Cadence client. /// </note> /// </remarks> public async Task SendHeartbeatAsync(byte[] details = null) { activity.EnsureNotLocal(); var reply = (ActivityRecordHeartbeatReply)await Client.CallProxyAsync( new ActivityRecordHeartbeatRequest() { ContextId = activity.ContextId.Value, Details = details }); reply.ThrowOnError(); }
/// <summary> /// <para> /// Records a heartbeat with optional details to Cadence. /// </para> /// <note> /// <b>IMPORTANT:</b> Heartbeats are not supported for local activities. /// </note> /// </summary> /// <param name="details">Optional heartbeart details.</param> /// <returns>The tracking <see cref="System.Threading.Tasks.Task"/>.</returns> /// <exception cref="InvalidOperationException">Thrown for local activity executions.</exception> /// <remarks> /// <para> /// Long running activities need to send periodic heartbeats back to /// Cadence to prove that the activity is still alive. This can also /// be used by activities to implement checkpoints or record other /// details. This method sends a heartbeat with optional details /// encoded as a byte array. /// </para> /// <note> /// The maximum allowed time period between heartbeats is specified in /// <see cref="ActivityOptions"/> when activities are executed and it's /// also possible to enable automatic heartbeats sent by the Cadence client. /// </note> /// </remarks> public async Task RecordHeartbeatAsync(byte[] details = null) { await SyncContext.Clear; Client.EnsureNotDisposed(); parent.EnsureNotLocal(); var reply = (ActivityRecordHeartbeatReply)await Client.CallProxyAsync( new ActivityRecordHeartbeatRequest() { ContextId = parent.ContextId, Details = details }); reply.ThrowOnError(); }