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(); } }); } }