Quando o valor de um parâmetro C # 'out' ou 'ref' é retornado ao chamador?

Quando faço uma tarefa para umout ouref parâmetro, é o valor imediatamente atribuído à referência fornecida pelo chamador, ou são osout eref valores de parâmetros atribuídos às referências quando o método retorna? Se o método lança uma exceção, os valores são retornados?

Por exemplo:

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?
}

questionAnswers(2)

yourAnswerToTheQuestion