public ChannelOperationInstruction DeepCloneWithMonitoringInfo(ChannelOperationMonitoringInfo monitoringInfo)
        {
            var result = new ChannelOperationInstruction(
                this.Operation?.DeepClone(),
                monitoringInfo,
                this.Tags?.DeepClone());

            return(result);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ChannelOperationInstruction"/> class.
        /// </summary>
        /// <param name="operation">The channel operation.</param>
        /// <param name="monitoringInfo">The information needed to monitor the execution of the operation.</param>
        /// <param name="tags">OPTIONAL tags to use when putting the operation into the channel-specific Operation Stream.  DEFAULT is to specify no tags.</param>
        public ChannelOperationInstruction(
            IOperation operation,
            ChannelOperationMonitoringInfo monitoringInfo,
            IReadOnlyCollection <NamedValue <string> > tags = null)
        {
            new { operation }.AsArg().Must().NotBeNull();
            new { monitoringInfo }.AsArg().Must().NotBeNull();

            this.Operation      = operation;
            this.MonitoringInfo = monitoringInfo;
            this.Tags           = tags;
        }