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


IAsyncOperationWithProgress<TResult,TProgress> Интерфейс

Определение

Представляет асинхронную операцию, которая может сообщать вызывающим абонентам об обновлениях хода выполнения. Это тип возвращаемого значения для многих среда выполнения Windows асинхронных методов, которые имеют результаты, а также сообщают о ходе выполнения.

public interface class IAsyncOperationWithProgress : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(3050321623, 58007, 18831, 186, 96, 2, 137, 231, 110, 35, 221)]
template <typename TResult, typename TProgress>
struct IAsyncOperationWithProgress : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(3050321623, 58007, 18831, 186, 96, 2, 137, 231, 110, 35, 221)]
public interface IAsyncOperationWithProgress<TResult,TProgress> : IAsyncInfo
Public Interface IAsyncOperationWithProgress(Of TResult, TProgress)
Implements IAsyncInfo

Параметры типа

TResult
TProgress
Производный
Атрибуты
Реализации

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.FoundationContract (появилось в v1.0)

Комментарии

IAsyncOperationWithProgress<TResult,TProgress> — это тип возвращаемого значения для многих среда выполнения Windows асинхронных методов, которые имеют результат после завершения, а также поддерживают уведомления, сообщающие о ходе выполнения (на которые вызывающие абоненты могут подписаться путем назначения обратного вызова для progress). Это около 100 различных API среда выполнения Windows. API, которые не сообщают о ходе выполнения (но имеют результат), используют другой интерфейс , IAsyncOperation<TResult>.

При использовании методов, возвращающих IAsyncOperationWithProgress<TResult,TProgress> (с определенным ограничением TResult ) в коде приложения, вы обычно не обращаетесь к возвращаемого значению IAsyncOperationWithProgress напрямую. Это связано с тем, что вы почти всегда используете синтаксис ожидания для конкретного языка. В этом случае очевидное возвращаемое значение метода — это тип, предоставленный в качестве параметра TResult . Дополнительные сведения см. в статье Асинхронное программирование или в одном из языковых руководств по среда выполнения Windows асинхронного программирования (вызов асинхронных API в C# или Visual Basic, C++, JavaScript).

IAsyncOperationWithProgress TResult,TProgress<> не используется напрямую, даже если вы не используете синтаксис ожидания для конкретного языка. Каждый из языков имеет точки расширения, которые обычно проще использовать, чем интерфейс среда выполнения Windows. JavaScript имеет синтаксис WinJS.Promise и then/done . В .NET есть метод расширения AsTask , и после преобразования IAsyncOperationWithProgress<TResult,TProgress> в task<TResult> легче получить результат, отменить, получить уведомление о завершении и т. д. Для C++/CX вызовы можно упаковать с помощью среды выполнения параллелизма (и использовать create_task). Иными словами, IAsyncOperationWithProgress<TResult,TProgress> можно считать инфраструктурой уровня среды выполнения, которую каждый из языков использует в качестве платформы для поддержки ожидающего синтаксиса или асинхронных моделей программирования по-своему.

В частности, если вы хотите обрабатывать ход выполнения в коде .NET, используйте сигнатуру AsTask , которая при использовании расширения имеет один ссылочный параметр IProgress . (В этом использовании единица выполнения уже ограничена и соответствует используемому методу IAsyncOperationWithProgress.) Укажите объект, реализующий IProgress, и реализация метода Report вызывается каждый раз, когда метод среда выполнения Windows сообщает уведомление о ходе выполнения.

Чтобы отслеживать ход выполнения действия (если не используются описанные выше методы для конкретного языка), задайте свойство Progress, указав ему имя метода, реализующего делегат TResult,TProgressHandler AsyncOperationProgressHandler<.>

Функции расширения C++/WinRT

Примечание

Функции расширения существуют в типах проекций C++/WinRT для определенных API среда выполнения Windows. Например, winrt::Windows::Foundation::IAsyncAction — это тип проекции C++/WinRT для IAsyncAction. Функции расширения не являются частью поверхности двоичного интерфейса приложения (ABI) фактических типов среда выполнения Windows, поэтому они не перечислены как члены СРЕДА ВЫПОЛНЕНИЯ WINDOWS API. Но их можно вызывать из любого проекта C++/WinRT. См. статью Функции C++/WinRT, расширяющие среда выполнения Windows API.

TResult get() const;

Синхронно ожидает завершения операции и возвращает завершенное значение. Создает соответствующее исключение, если операция отменена или переходит в состояние ошибки. Вы не должны вызывать его из однопотоковой квартиры. Дополнительные сведения и примеры кода, демонстрирующие вызов get, см. в статье Написание сопрограммы.

AsyncStatus wait_for(TimeSpan const& timeout) const;

Синхронно ожидает завершения операции или указанного времени ожидания. Возвращает состояние IAsyncOperationWithProgress или AsyncStatus::Started , если истекло время ожидания. Если время ожидания действия не истекло, вызовите Метод GetResults , чтобы получить результаты операции. Дополнительные сведения и примеры кода, демонстрирующие вызов wait_for, см. в статье Простое асинхронное время ожидания.

Наследование интерфейса

IAsyncOperationWithProgress<TResult,TProgress> наследует IAsyncInfo. Типы, реализующие IAsyncOperationWithProgress<TResult,TProgress> , также реализуют члены интерфейса IAsyncInfo:

Примечания для разработчиков

Как и при вызове существующих методов, существуют зависящие от языка способы определения асинхронных методов, которые не используют IAsyncOperationWithProgress<TResult,TProgress> напрямую. При написании кода с помощью .NET метод может возвращать объект Task<TResult>. Для C++/CX можно использовать среду выполнения параллелизма. Однако если вы определяете компонент, можно использоватьзадачуTask/ для внутренних целей, но необходимо вернуть один из интерфейсов среда выполнения Windows для общедоступных методов. Асинхронные типы поддержки для конкретного языка (и многие другие языковые типы, которые можно использовать в коде) не могут использоваться для общедоступной контактной зоны компонента среда выполнения Windows.

Свойства

Completed

Возвращает или задает делегат, который вызывается по завершении операции.

ErrorCode

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

(Унаследовано от IAsyncInfo)
Id

Возвращает дескриптор асинхронной операции.

(Унаследовано от IAsyncInfo)
Progress

Возвращает или задает метод, обрабатывающий уведомления о ходе выполнения.

Status

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

(Унаследовано от IAsyncInfo)

Методы

Cancel()

Отменяет асинхронную операцию.

(Унаследовано от IAsyncInfo)
Close()

Закрывает асинхронную операцию.

(Унаследовано от IAsyncInfo)
GetResults()

Возвращает результаты операции.

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

См. также раздел