¿HashSet concurrente <T> en .NET Framework?

Tengo la siguiente clase.

class Test{
    public HashSet<string> Data = new HashSet<string>();
}

Necesito cambiar el campo "Datos" de diferentes subprocesos, por lo que me gustaría recibir algunas opiniones sobre mi implementación actual segura para subprocesos.

class Test{
    public HashSet<string> Data = new HashSet<string>();

    public void Add(string Val){
            lock(Data) Data.Add(Val);
    }

    public void Remove(string Val){
            lock(Data) Data.Remove(Val);
    }
}

¿Hay una solución mejor, ir directamente al campo y protegerla del acceso simultáneo por múltiples hilos?

Respuestas a la pregunta(5)

Su respuesta a la pregunta