Может возвращаться синхронно, если запрошенное действие может быть выполнено мгновенно, например, если буфер TCP уже содержит данные, необходимые для завершения метода ReceiveAsync, или клиент уже ожидает принятия ect.
Примеры обработчика, потому что AsyncMethod не будет. Я был бы рад использовать вызывать обработчик непосредственно в этом случае (если есть только одна подписка). Однако есть практика, которая предполагает, что вы не должны этого делать, скорее, обработчик не должен делать ничего, кроме вызова другого метода (возможно, с более значимыми параметрами), который обрабатывает логику, и что вы должны вызывать этот метод, а не фактическое событие / обработчик.
Событие не будет вызвано до завершения операции, если, конечно, вы не сделаете это вручную, когда асинхронный метод вернет true (не завершено).
Из MSDN:
Возвращает true , если операция ввода-вывода находится в состоянии ожидания. Событие SocketAsyncEventArgs.Completed для параметра e будет вызвано при завершении операции.
Возвращает false , если операция ввода-вывода завершена синхронно. В этом случае событие SocketAsyncEventArgs.Completed для параметра e не будет вызвано , и объект e, переданный в качестве параметра, может быть проверен сразу после возврата вызова метода для получения результата операции.