Я просто не могу понять, почему IAsyncResult является интерфейсом вместо простого объекта. Как я правильно помню, интерфейс содержит только имена методов без реализации, поэтому я не вижу, как он используется здесь, поскольку я не получаю никакого класса и не переопределяю его методы? Я просто смущен. СпасибоIasyncresult - почему это не просто объект, почему это интерфейс?
ответ
Таким образом, результатом может быть любой тип объекта, который реализует интерфейс IAsyncResult.
Вы правы, что интерфейс содержит только методы/свойства без реализации. В этом случае гарантируется, что объект AsyncResult содержит методы, которые необходимы для «Async-framework».
IAsyncResult содержит четыре свойства:
- AsyncState (Объект)
- AsyncWaitHandle (WaitHandle)
- CompletedSynchronously (Boolean)
- IsCompleted (Boolean)
Эти свойства являются просто требуется при работе с методами Async. Если бы это был объект, вы бы были менее гибкими, я думаю.
Если бы это было просто объект, это может быть что угодно - и вы могли бы не полагаться на определенные свойства и/или методов присутствует, как вы можете, когда вы знаете, вы получите объект, который реализует интерфейс IAsyncResult
,
Поскольку объект вы получаете обратно необходимо реализовать интерфейс в вопросе, вы можете рассчитывать на то, что свойства AsyncState
, AsyncWaitHandle
, CompletedSynchronously
и IsCompleted
будет присутствовать.
Если у вас был только объект, и вы вернулись int
- как бы вы получили эти свойства, которые вам нужны?
Потому что «ASyncResult» сам по себе ничего конкретного.
Поскольку C# допускает только одностороннее перемещение, создавая его интерфейс, вы можете реализовать его на любом выбранном вами типе объектов.
Например, если я метод мой возвращаю тип Foo, я могу создать асинхронный тип возвращаемого значения для моего приложения просто путем создания подкласса говоря
FooAsync : Foo, IAsyncResult
И просто бросьте в отличие написания кода для извлечения значения.
Возможный дубликат [Почему не BeginInvoke возвращает ссылку типа AsyncResult?] (Http://stackoverflow.com/questions/2352161/why-doesnt-begininvoke-return-reference-of-type-asyncresult) –