public override bool Lock(string serviceKey, int expiryFromSeconds) { bool isLocked = false; try { string selectQuery = "SELECT CreationDate FROM LokiLockings WHERE ServiceKey=@ServiceKey"; var isAnyLocked = Task.Run(async() => await MSSQLHelper.ExecuteScalarAsync(_connectionString, CommandType.Text, selectQuery, new SqlParameter("ServiceKey", serviceKey))).Result; if (isAnyLocked != null) { DateTime creationDate = Convert.ToDateTime(isAnyLocked); if (creationDate.AddSeconds(expiryFromSeconds) < DateTime.Now) { // TODO: Concurrent workerlarda sıkıntı yaratır. Düzeltmek lazım. string updateQuery = "UPDATE LokiLockings SET CreationDate=@CreationDate WHERE ServiceKey=@ServiceKey"; int isUpdated = Task.Run(async() => await MSSQLHelper.ExecuteNonQueryAsync(_connectionString, CommandType.Text, updateQuery, new SqlParameter("CreationDate", DateTime.Now), new SqlParameter("ServiceKey", serviceKey))).Result; if (isUpdated > 0) { isLocked = true; } } } else { string insertQuery = "INSERT INTO LokiLockings (ServiceKey, CreationDate) VALUES(@ServiceKey, @CreationDate)"; int isInserted = Task.Run(async() => await MSSQLHelper.ExecuteNonQueryAsync(_connectionString, CommandType.Text, insertQuery, new SqlParameter("ServiceKey", serviceKey), new SqlParameter("CreationDate", DateTime.Now))).Result; if (isInserted > 0) { isLocked = true; } } } catch (Exception ex) { Logger.ErrorException($"There was an error while acquiring lock for service:{serviceKey}.", ex); isLocked = false; } return(isLocked); }
public override bool Lock(string serviceKey, int expiryFromSeconds) { bool isLocked = false; try { string selectQuery = "SELECT CreationDate FROM LokiLockings WHERE ServiceKey=@ServiceKey"; var isAnyLocked = Task.Run(async() => await MSSQLHelper.ExecuteScalarAsync(_connectionString, CommandType.Text, selectQuery, new SqlParameter("ServiceKey", serviceKey))).Result; if (isAnyLocked != null) { DateTime creationDate = Convert.ToDateTime(isAnyLocked); if (creationDate.AddSeconds(expiryFromSeconds) < DateTime.Now) { string updateQuery = "UPDATE LokiLockings SET CreationDate=@CreationDate WHERE ServiceKey=@ServiceKey"; int isUpdated = Task.Run(async() => await MSSQLHelper.ExecuteNonQueryAsync(_connectionString, CommandType.Text, updateQuery, new SqlParameter("ServiceKey", serviceKey))).Result; if (isUpdated > 0) { isLocked = true; } } } else { string insertQuery = "INSERT INTO LokiLockings (ServiceKey, CreationDate) VALUES(@ServiceKey, @CreationDate)"; int isInserted = Task.Run(async() => await MSSQLHelper.ExecuteNonQueryAsync(_connectionString, CommandType.Text, insertQuery, new SqlParameter("ServiceKey", serviceKey), new SqlParameter("CreationDate", DateTime.Now))).Result; if (isInserted > 0) { isLocked = true; } } } catch (Exception ex) { isLocked = false; } return(isLocked); }