Прочитать на английском

Поделиться через


IAsyncResult.IsCompleted Свойство

Определение

Возвращает значение, указывающее, выполнена ли асинхронная операция.

public bool IsCompleted { get; }

Значение свойства

Boolean

Значение true, если операция выполнена; в противном случае — значение false.

Примеры

В следующем примере показано, как использовать IsCompleted свойство IAsyncResult объекта для обнаружения после завершения асинхронного вызова. В этом случае асинхронный вызов выполняется с помощью BeginInvoke метода делегата. Свойство можно использовать IsCompleted для опроса завершения при выполнении асинхронного вызова из потока, который обслуживает пользовательский интерфейс. Опрос завершения позволяет вызывающему потоку продолжить выполнение при асинхронном вызове для потока ThreadPool .

Пример состоит из двух классов: класса, содержащего метод, который вызывается асинхронно, и класс, содержащий Main метод, который выполняет вызов.

Дополнительные сведения и дополнительные примеры асинхронных методов вызова с помощью делегатов см. в разделе "Асинхронные вызовы синхронных методов".

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);
}
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 == false) {
                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.".
 */

Комментарии

Если это свойство имеет trueзначение, можно предположить, что можно безопасно отменить все ресурсы, выделенные для использования асинхронной операцией.

Примечания для тех, кто реализует этот метод

Реализация обычно возвращает значение частного поля или внутреннего теста в качестве значения этого свойства.

Примечания для тех, кто вызывает этот метод

Клиенты, которые опрашивать состояние операции (в отличие от ожидания объекта синхронизации), используют это свойство для определения состояния операции.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0