Il n'y a pas de règle stricte et rapide, mais voici quelques conseils pour vous:
synchronisation par rapport async: utiliser la synchronisation lorsque vous ne disposez pas des tâches de longue durée. Utilisez async quand vous faites. Par exemple, si le gestionnaire interroge une base de données ou effectue un appel de service Web, il doit être asynchrone.
générique vs personnalisé: utilisez générique si vous ne vous souciez pas de l'extension dans l'URL (ce sera * .ashx). Utilisez custom si l'extension est importante (peut-être pour générer des images PNG personnalisées). Les gestionnaires entièrement personnalisés requièrent une étape supplémentaire pour les enregistrer dans web.config, mais sont à peu près identiques aux gestionnaires génériques. En outre, il peut être utile de garder à l'esprit que la classe Page est en réalité un HttpHandler qui gère les fichiers .aspx - et vous pouvez bien entendu avoir des pages sync et async, avec les mêmes instructions que ci-dessus .
Dans le cas où cela vous intéresse, je couvre cette information en détail dans mon livre, y compris des exemples (Ultra-Fast ASP.NET).