Bagikan melalui


IAsyncOperation<TResult> Antarmuka

Definisi

Mewakili operasi asinkron, yang mengembalikan hasil setelah selesai. Ini adalah jenis pengembalian untuk banyak metode asinkron Windows Runtime (WinRT) yang memiliki hasil tetapi tidak melaporkan kemajuan.

public interface class IAsyncOperation : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
template <typename TResult>
struct IAsyncOperation : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
public interface IAsyncOperation<TResult> : IAsyncInfo
Public Interface IAsyncOperation(Of TResult)
Implements IAsyncInfo

Jenis parameter

TResult
Turunan
Atribut
Penerapan

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.FoundationContract (diperkenalkan dalam v1.0)

Keterangan

IAsyncOperation<TResult> adalah jenis pengembalian untuk banyak metode asinkron WinRT yang memiliki hasil setelah selesai, tetapi tidak melaporkan kemajuan. Ini merupakan lebih dari 650 API WinRT yang berbeda. API yang melaporkan kemajuan dan memiliki hasil menggunakan antarmuka lain, IAsyncOperationWithProgress<TResult,TProgress>.

Saat Anda menggunakan metode yang mengembalikan IAsyncOperation<TResult> (dengan batasan spesifik TResult) dalam kode aplikasi, Anda biasanya tidak mengakses nilai pengembalian IAsyncOperation secara langsung. Itu karena Anda hampir selalu menggunakan sintaksis yang dapat ditunggu khusus bahasa. Dalam hal ini, nilai pengembalian yang jelas dari metode adalah jenis yang disediakan sebagai parameter TResult. Untuk informasi selengkapnya, lihat pemrograman asinkron, atau salah satu panduan khusus bahasa untuk pemrograman asinkron WinRT (Memanggil API asinkron di C# atau Visual Basic, C++, JavaScript).

Tidak umum untuk menggunakan IAsyncOperation<TResult> secara langsung bahkan jika Anda tidak menggunakan sintaks yang dapat ditunggu khusus bahasa. Masing-masing bahasa memiliki titik ekstensi yang umumnya lebih mudah digunakan daripada antarmuka WinRT. JavaScript memiliki WinJS.Promise, dan sintaks then/done. .NET memiliki metode ekstensi AsTask , dan setelah dikonversi ke TaskTResult, lebih mudah untuk mendapatkan hasilnya, membatalkan, mendapatkan pemberitahuan tentang penyelesaian, dan sebagainya. Untuk C++/CX, Anda dapat membungkus panggilan menggunakan runtime Konkurensi (dan menggunakan create_task). Dengan kata lain, IAsyncOperation<TResult> dapat dianggap sebagai infrastruktur tingkat runtime, yang digunakan masing-masing bahasa sebagai kerangka kerja untuk mendukung sintaks yang dapat ditunggu atau model pemrograman asinkron dengan cara mereka sendiri.

Alih-alih menggunakan IAsyncOperation<TResult>, beberapa metode asinkron WinRT menggunakan jenis operasi kustom. Misalnya, dataReaderLoadOperation adalah jenis WinRT yang mengimplementasikan IAsyncOperation menggunakan uint sebagai jenis hasil. Jenis DataReaderLoadOperation kemudian digunakan sebagai jenis operasi/hasil kustom untuk metode DataReader.LoadAsync.

Jika Anda memiliki metode yang mengembalikan .NET dan memerlukan untuk meneruskan ke API WinRT, Anda dapat menggunakan metode ekstensi AsAsyncOperation.

Fungsi ekstensi C++/WinRT

Nota

Fungsi ekstensi ada pada jenis proyeksi C++/WinRT untuk API WinRT tertentu. Misalnya, winrt::Windows::Foundation::IAsyncAction adalah jenis proyeksi C++/WinRT untuk IAsyncAction. Fungsi ekstensi bukan bagian dari permukaan antarmuka biner aplikasi (ABI) dari jenis WinRT yang sebenarnya, sehingga tidak terdaftar sebagai anggota API WinRT. Tetapi Anda dapat memanggilnya dari dalam proyek C++/WinRT apa pun. Lihat fungsi C++/WinRT yang memperluas API Windows Runtime.

TResult get() const;

Menunggu secara sinkron agar operasi selesai, dan mengembalikan nilai yang telah selesai. Memberikan pengecualian yang sesuai jika operasi dibatalkan, atau memasuki status kesalahan. Anda tidak boleh menyebutnya dari apartemen berulir tunggal. Untuk informasi selengkapnya, dan contoh kode yang menunjukkan cara memanggil get, lihat Menulis coroutine.

AsyncStatus wait_for(TimeSpan const& timeout) const;

Menunggu secara sinkron agar operasi selesai, atau untuk batas waktu yang ditentukan. Mengembalikan status IAsyncOperation, atau AsyncStatus::Started jika batas waktu berlalu. Jika tindakan tidak kehabisan waktu, panggil GetResults untuk mendapatkan hasil operasi. Untuk informasi selengkapnya, dan contoh kode yang menunjukkan cara memanggil wait_for, lihat batas waktu Asinkron menjadi mudah.

Pewarisan antarmuka

IAsyncOperation<TResult> mewarisi IAsyncInfo. Jenis yang mengimplementasikan IAsyncOperation<TResult> juga mengimplementasikan anggota antarmuka IAsyncInfo:

Catatan untuk pelaksana

Seperti halnya memanggil metode yang ada, ada cara khusus bahasa untuk menentukan metode asinkron yang tidak menggunakan IAsyncOperation<TResult> secara langsung. Jika menulis kode menggunakan .NET, metode Anda dapat mengembalikan Tugas <TResult>. Untuk C++/CX, Anda dapat menggunakan runtime Konkurensi. Namun, jika Anda mendefinisikan komponen , Anda dapat menggunakan Task/task secara internal tetapi Anda harus mengembalikan salah satu antarmuka WinRT untuk metode publik Anda. Jenis dukungan asinkron khusus bahasa (dan banyak jenis spesifik bahasa lainnya yang mungkin Anda gunakan dalam kode) tidak dapat digunakan untuk area permukaan publik komponen WinRT.

Properti

Completed

Mendapatkan atau mengatur delegasi yang dipanggil saat operasi selesai.

ErrorCode

Mendapatkan string yang menjelaskan kondisi kesalahan operasi asinkron.

(Diperoleh dari IAsyncInfo)
Id

Mendapatkan handel operasi asinkron.

(Diperoleh dari IAsyncInfo)
Status

Mendapatkan nilai yang menunjukkan status operasi asinkron.

(Diperoleh dari IAsyncInfo)

Metode

Cancel()

Membatalkan operasi asinkron.

(Diperoleh dari IAsyncInfo)
Close()

Menutup operasi asinkron.

(Diperoleh dari IAsyncInfo)
GetResults()

Mengembalikan hasil operasi.

Berlaku untuk

Lihat juga