/// <summary> /// Returns the <see cref="SyncSignalStatus"/> for the specified workflow and signal. /// </summary> /// <param name="signalId">The target signal ID.</param> /// <returns>The <see cref="SyncSignalStatus"/> for the signal.</returns> internal SyncSignalStatus GetSignalStatus(string signalId) { Covenant.Requires <ArgumentNullException>(!string.IsNullOrEmpty(signalId), nameof(signalId)); // Lookup the status for the signal. lock (syncLock) { if (!signalIdToStatus.TryGetValue(signalId, out var signalStatus)) { signalStatus = new SyncSignalStatus() { Completed = false }; signalIdToStatus.Add(signalId, signalStatus); } return(signalStatus); } }
/// <summary> /// Creates a new signal status record for the specified signal ID if no signal /// status already exists. /// </summary> /// <param name="signalId">The signal ID.</param> /// <param name="args">The signal arguments.</param> /// <param name="newSignal">Returns as <c>true</c> if the signal status was created by the method.</param> /// <returns>The new <see cref="SyncSignalStatus"/> instance or the preexisting one.</returns> internal SyncSignalStatus SetSignalStatus(string signalId, Dictionary <string, object> args, out bool newSignal) { Covenant.Requires <ArgumentNullException>(!string.IsNullOrEmpty(signalId), nameof(args)); Covenant.Requires <ArgumentNullException>(args != null, nameof(args)); newSignal = false; lock (syncLock) { if (!signalIdToStatus.TryGetValue(signalId, out var signalStatus)) { newSignal = true; signalStatus = new SyncSignalStatus(); signalIdToStatus.Add(signalId, signalStatus); } signalStatus.Args = args; return(signalStatus); } }