CHAPTER 19 MULTITHREADED, PARALLEL, AND ASYNC PROGRAMMING
The Role of the AsyncResult Class
Currently, the AddComplete() method is not printing out the actual result of the operation (adding two
numbers). The reason is that the target of the AsyncCallback delegate (AddComplete(), in this example)
does not have access to the original BinaryOp delegate created in the scope of Main() and, therefore, you
can’t call EndInvoke() from within AddComplete()!
While you could simply declare the BinaryOp variable as a static member variable in the class to
allow both methods to access the same object, a more elegant solution is to use the incoming
IAsyncResult parameter.
The incoming IAsyncResult parameter passed into the target of the AsyncCallback delegate is
actually an instance of the AsyncResult class (note the lack of an I prefix) defined