public async Task HandleAsync(Message msg, SqlTransaction tran = null)
        {
            var msgAllreadyProcessed = await _dao.CheckIfMessageIsDuplicated(msg, tran);

            if (msgAllreadyProcessed)
            {
                return;
            }

            if (tran != null)
            {
                await InternalHandleAsync(msg, tran);
            }
            else
            {
                await _dao.WithConnection(async cn =>
                {
                    var localTran = cn.BeginTransaction();
                    try
                    {
                        await InternalHandleAsync(msg, localTran);
                        localTran.Commit();
                    }
                    catch (Exception ex)
                    {
                        localTran.Rollback();
                    }
                });
            }
        }