Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

IAsyncResult.IsCompleted Property

Definition

Namespace:
System
Assemblies:
mscorlib.dll, System.Runtime.dll
Assemblies:
netstandard.dll, System.Runtime.dll
Assembly:
System.Runtime.dll
Assembly:
mscorlib.dll
Assembly:
netstandard.dll
Source:
IAsyncResult.cs
Source:
IAsyncResult.cs
Source:
Base64EncoderHelper.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Gets a value that indicates whether the asynchronous operation has completed.

public:
 property bool IsCompleted { bool get(); };
public bool IsCompleted { get; }
member this.IsCompleted : bool
Public ReadOnly Property IsCompleted As Boolean

Property Value

true if the operation is complete; otherwise, false.

Examples

The following example shows how to use the IsCompleted property of the IAsyncResult to discover when an asynchronous call completes. In this case, the asynchronous call is made by using the BeginInvoke method of a delegate. You might use the IsCompleted property to poll for completion when making the asynchronous call from a thread that services the user interface. Polling for completion allows the calling thread to continue executing while the asynchronous call executes on a ThreadPool thread.

The example consists of two classes: the class that contains the method that is called asynchronously, and the class that contains the Main method that makes the call.

For more information and more examples of calling methods asynchronously by using delegates, see Calling Synchronous Methods Asynchronously.

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
 public class AsyncDemo
 {
 // The method to be executed asynchronously.
 public string TestMethod(int callDuration, out int threadId)
 {
 Console.WriteLine("Test method begins.");
 Thread.Sleep(callDuration);
 threadId = Thread.CurrentThread.ManagedThreadId;
 return String.Format("My call time was {0}.", callDuration.ToString());
 }
 }
 // The delegate must have the same signature as the method
 // it will call asynchronously.
 public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}
Imports System.Threading
Imports System.Runtime.InteropServices 

Namespace Examples.AdvancedProgramming.AsynchronousOperations
 Public Class AsyncDemo 
 ' The method to be executed asynchronously.
 Public Function TestMethod(ByVal callDuration As Integer, _
 <Out> ByRef threadId As Integer) As String
 Console.WriteLine("Test method begins.")
 Thread.Sleep(callDuration)
 threadId = Thread.CurrentThread.ManagedThreadId()
 return String.Format("My call time was {0}.", callDuration.ToString())
 End Function
 End Class

 ' The delegate must have the same signature as the method
 ' it will call asynchronously.
 Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer, _
 <Out> ByRef threadId As Integer) As String
End Namespace
using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
 public class AsyncMain
 {
 static void Main() {
 // The asynchronous method puts the thread id here.
 int threadId;

 // Create an instance of the test class.
 AsyncDemo ad = new AsyncDemo();

 // Create the delegate.
 AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);

 // Initiate the asychronous call.
 IAsyncResult result = caller.BeginInvoke(3000,
 out threadId, null, null);

 // Poll while simulating work.
 while(!result.IsCompleted) {
 Thread.Sleep(250);
 Console.Write(".");
 }

 // Call EndInvoke to retrieve the results.
 string returnValue = caller.EndInvoke(out threadId, result);

 Console.WriteLine("\nThe call executed on thread {0}, with return value \"{1}\".",
 threadId, returnValue);
 }
 }
}

/* This example produces output similar to the following:

Test method begins.
.............
The call executed on thread 3, with return value "My call time was 3000.".
 */
Imports System.Threading
Imports System.Runtime.InteropServices 

Namespace Examples.AdvancedProgramming.AsynchronousOperations

 Public Class AsyncMain 
 Shared Sub Main() 
 ' The asynchronous method puts the thread id here.
 Dim threadId As Integer

 ' Create an instance of the test class.
 Dim ad As New AsyncDemo()

 ' Create the delegate.
 Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)
 
 ' Initiate the asynchronous call.
 Dim result As IAsyncResult = caller.BeginInvoke(3000, _
 threadId, Nothing, Nothing)

 ' Poll while simulating work.
 While result.IsCompleted = False
 Thread.Sleep(250)
 Console.Write(".")
 End While

 ' Call EndInvoke to retrieve the results.
 Dim returnValue As String = caller.EndInvoke(threadId, result)

 Console.WriteLine(vbCrLf & _
 "The call executed on thread {0}, with return value ""{1}"".", _
 threadId, returnValue)
 End Sub
 End Class
End Namespace

' This example produces output similar to the following:
'
'Test method begins.
'.............
'The call executed on thread 3, with return value "My call time was 3000.".

Remarks

When this property is true, you can assume it is safe to discard any resources you allocate for use by the asynchronous operation.

Notes to Implementers

Implementers will typically return the value of a private field or internal test as the value of this property.

Notes to Callers

Clients that poll for operation status (as opposed to waiting on a synchronization object) use this property to determine the status of the operation.

Applies to


Feedback

Was this page helpful?