Name
IAsyncResult
Synopsis
This interface is used in
asynchronous programming to act as a
placeholder for the result of the async call. It is most commonly
used when an instance of a delegate type is fired using the
BeginInvoke
method. (This idiom is used
extensively throughout the .NET Framework Class Library.)
Asynchronous method calls can be harvested in a number of ways. A
programmer can poll the call by checking the
IsCompleted
property of the
IAsyncResult
object to see if the call has
completed yet. This, while perhaps the simplest approach, is also
likely the most wasteful, as the caller needs to be in some sort of
spin loop, repeatedly checking the property until a
true
is received.
A variant of the polling spin loop is to use the
AsyncWaitHandle
property of
IAsyncResult
. This is a standard Win32 handle that
can be used in some of the synchronization primitives provided in the
System.Threading
namespace. Specifically, this
property is a System.Threading.WaitHandle
instance, meaning that the programmer can call any of the
Wait
methods: WaitOne( )
,
WaitAny( )
, or WaitAll( )
. The
net effect is the same—put the calling thread to sleep until
the async call completes.
Although not formally part of the IAsyncResult
interface, a corresponding EndInvoke
method is
supported by delegates. The EndInvoke
method blocks the calling thread until the async call completes. Alternatively, at the point of the async delegate call, a programmer can specify a callback delegate to call when the async ...
Get C# in a Nutshell, Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.