TcpClient#Connect のタイムアウト制御

TcpClient でコネクションを張る際の接続時タイムアウトをユーザコードで任意に指定しようとすると、次のようなコードが今風(C# 5.0 以降風)なのだろうか?

try {
    int timeout = 接続タイムアウト(ms);
    TcpClient client = new TcpClient();
    Task con_task = client.ConnectAsync(remote_addr, remote_port);
    if (!con_task.Wait(timeout))    // 接続拒否などは AggregateException
    {
        client.Close();
        throw new SocketException(10060);   // 10060 -> WSAETIMEDOUT
    }

    // ※接続後の処理

} catch (SocketException e) {
   // timeout でのタイムアウト
} catch (AggregateException e) {
   if (e.InnerException is SocketException) {
       // 接続失敗 拒否されたか Socket でのタイムアウト
   }
}

※timeout にシステムデフォルトのタイムアウト時間(約21秒)より長い時間を指定した場合は、システムデフォルト値が優先されます。
timeout 優先にしようとすると、リトライ処理を書くことになりそうな
例外が SocketException と AggregateException に割れるのも美しくない…

WindowsにおけるTCPの接続要求タイムアウト - 涼の成長記録