¿Cuándo se devuelve el valor de un parámetro C # 'out' o 'ref' al llamante?

Cuando hago una asignación a unout oref parámetro, es el valor asignado inmediatamente a la referencia proporcionada por la persona que llama, o son losout yref ¿Valores de parámetro asignados a las referencias cuando el método vuelve? Si el método lanza una excepción, ¿se devuelven los valores?

Por ejemplo:

int callerOutValue = 1;
int callerRefValue = 1;
MyMethod(123456, out callerOutValue, ref callerRefValue);

bool MyMethod(int inValue, out int outValue, ref int refValue)
{
    outValue = 2;
    refValue = 2;

    throw new ArgumentException();

    // Is callerOutValue 1 or 2?
    // Is callerRefValue 1 or 2?
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta