метод асинхронной не имеет обратного вызова
Ну это проблема. A очень большой проблема. Если это вообще возможно, вы должны это исправить; если нет веских оснований для этого, все асинхронные методы должны предоставить некоторым средствам для звонящего знать, когда они завершатся, является ли это обратным вызовом, возвращая Task
, увольняя событие и т. д. Это особенно беспокоит асинхронное метод, который зависит от ресурса, доступного для этого.
Если у вас действительно нет способа получить уведомление, когда операция завершена, тогда вам не удастся позвонить по номеру Dispose
после завершения этого метода. Единственное средство, которое вы обеспечиваете, чтобы вы не избавлялись от ресурса, в то время как асинхронная операция по-прежнему нуждается в утечке ресурса, а не утилизации его вообще. Если одноразовый ресурс имеет финализатор, возможно, он будет очищен в конце концов, но не все одноразовые ресурсы сделают это.
Если вы можете изменить асинхронный метод каким-то образом, то вам просто нужно позвонить Dispose
в функции обратного вызова, или в продолжение этой задачи, или в обработчик соответствующего события. Вы не сможете использовать using
, если не сможете выполнить асинхронную операцию (потому что await
просто потрясающе).
Асинхронная операция должна взять на себя ответственность за удаление объекта. –