예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
            }
        }