/// <summary>
        /// Gestisce gli errori che si possono verificare durante l'elaborazione del task.
        /// </summary>
        /// <param name="taskProcId">identificativo di elaborazione del task che ha provocato l'errore</param>
        /// <param name="exception">l'eccezione contenente gli eventuali dettagli dell'errore</param>
        /// <param name="error">l'errore da restituire all'utente</param>
        private void HandleTaskPerformerError(string taskProcId, TaskPerformerException exception, out TaskErrorInfo error)
        {
            string errorId;
            string errorDetails = exception.ToString();

            HandleError(taskProcId, errorDetails, out errorId);

            var inner = exception.InnerException;

            TaskErrorCode code;
            string        details;

            if (inner is TaskDataReadException)
            {
                code    = TaskErrorCode.ComponentReadDataFailed;
                details = errorDetails;
            }
            else if (inner is TaskProcessingException)
            {
                code    = TaskErrorCode.ComponentProcessingFailed;
                details = errorDetails;
            }
            else if (inner is TaskResultWriteException)
            {
                code    = TaskErrorCode.ComponentWriteResultFailed;
                details = errorDetails;
            }
            else
            {
                code    = TaskErrorCode.ComponentUnknownError;
                details = string.Empty;   // exception shielding
            }

            // Errore da restituire all'utente.
            error = new TaskErrorInfo()
            {
                Id = errorId, Details = details, Code = code
            };
        }
        /// <summary>
        /// Gestisce gli errori che si possono verificare durante l'elaborazione del task.
        /// </summary>
        /// <param name="taskProcId">identificativo di elaborazione del task che ha provocato l'errore</param>
        /// <param name="exception">l'eccezione contenente gli eventuali dettagli dell'errore</param>
        /// <param name="error">l'errore da restituire all'utente</param>
        private void HandleTaskPerformerError(string taskProcId, TaskPerformerException exception, out TaskErrorInfo error)
        {
            string errorId;
            string errorDetails = exception.ToString();
            HandleError(taskProcId, errorDetails, out errorId);

            var inner = exception.InnerException;

            TaskErrorCode code;
            string details;

            if (inner is TaskDataReadException)
            {
                code = TaskErrorCode.ComponentReadDataFailed;
                details = errorDetails;
            }
            else if (inner is TaskProcessingException)
            {
                code = TaskErrorCode.ComponentProcessingFailed;
                details = errorDetails;
            }
            else if (inner is TaskResultWriteException)
            {
                code = TaskErrorCode.ComponentWriteResultFailed;
                details = errorDetails;
            }
            else
            {
                code = TaskErrorCode.ComponentUnknownError;
                details = string.Empty;   // exception shielding
            }

            // Errore da restituire all'utente.
            error = new TaskErrorInfo() { Id = errorId, Details = details, Code = code };
        }