Você não tem vários comandos rodando na conexão, você tem dois comandos rodando sequencialmente, um após o outro. Quando o primeiro comando expira, não há outro comando pendente na conexão. Seu código não envia o segundo comando para execução até que o primeiro comando seja bem-sucedido ou tenha gerado uma exceção.
O último parágrafo da documentação que você citou deve ser:Em uma situação em que vários objetos OracleCommand usam a mesma conexão simultaneamente , ...
static void Main(string[] args)
{
using (var conn = new OracleConnection("Pooling=False;...")) // why?
using (var cmd1 = conn.CreateCommand())
using (var cmd2 = conn.CreateCommand())
{
cmd1.CommandText = "UPDATE employee SET empname = 'temp1' WHERE id = 1";
cmd2.CommandText = "UPDATE employee SET empname = 'temp2' WHERE id = 2";
cmd1.CommandTimeout = 30;
cmd2.CommandTimeout = 30;
conn.Open();
// there are no commands on conn yet
try { cmd1.ExecuteNonQuery(); } // cmd1 is the only command on conn
catch (OracleException) { } // if timeout, no other command affected
// cmd1 is no longer on conn
try { cmd2.ExecuteNonQuery(); } // cmd2 is the only command on conn
catch (OracleException) { } // if timeout, no other command affected
// cmd2 is no longer on conn
}
}