Поскольку «ASyncResult» сам по себе не является чем-то конкретным.
Поскольку C # допускает только одиночное наследование, сделав его интерфейсом, вы сможете реализовать его на любом типе объекта, который вы выберете.
Например, если мой метод возвращает тип Foo, я могу создать асинхронный тип возврата для моего приложения, просто создав подкласс, говорящий
FooAsync : Foo, IAsyncResult
И просто приведите его в противоположность написанию кода для извлечения значений.