<future>
Dołącz standardową przyszłość> nagłówka<, aby zdefiniować szablony klas i szablony pomocnicze, które upraszczają uruchamianie funkcji — prawdopodobnie w osobnym wątku — i pobierają jego wynik. Wynikiem jest wartość zwracana przez funkcję lub wyjątek emitowany przez funkcję, ale nie jest przechwycony w funkcji.
Ten nagłówek używa środowiska uruchomieniowego współbieżności (ConcRT), aby można było go używać razem z innymi mechanizmami ConcRT. Aby uzyskać więcej informacji na temat środowiska ConcRT, zobacz Środowisko uruchomieniowe współbieżności.
Składnia
#include <future>
Uwagi
Uwaga
W kodzie skompilowanym przy użyciu / clr ten nagłówek jest blokowany.
Dostawca asynchroniczny przechowuje wynik wywołania funkcji. Asynchroniczny obiekt zwracany jest używany do pobierania wyniku wywołania funkcji. Skojarzony stan asynchroniczny zapewnia komunikację między dostawcą asynchronicznym a co najmniej jednym obiektem zwracanym asynchronicznym.
Program nie tworzy bezpośrednio żadnych skojarzonych obiektów stanu asynchronicznego. Program tworzy dostawcę asynchronicznego za każdym razem, gdy potrzebuje dostawcy i z niego tworzy asynchroniczny obiekt zwracany, który współudzieli skojarzony stan asynchroniczny z dostawcą. Asynchroniczne dostawcy i asynchroniczne obiekty powrotne zarządzają obiektami, które przechowują ich współużytkowany skojarzony stan asynchroniczny. Gdy ostatni obiekt odwołujący się do skojarzonego stanu asynchronicznego zwalnia go, obiekt, który przechowuje skojarzony stan asynchroniczny, zostanie zniszczony.
Dostawca asynchroniczny lub asynchroniczny obiekt zwracany, który nie ma skojarzonego stanu asynchronicznego, jest pusty.
Skojarzony stan asynchroniczny jest gotowy tylko wtedy, gdy jego dostawca asynchroniczny przechowywał wartość zwracaną lub przechowywał wyjątek.
Funkcja async
szablonu oraz szablony promise
klas i packaged_task
są dostawcami asynchronicznymi. Szablony future
klas i shared_future
opisują asynchroniczne obiekty zwracane.
Każdy z szablonów promise
klas , future
i shared_future
ma specjalizację typu void
i częściową specjalizację do przechowywania i pobierania wartości według odwołania. Te specjalizacje różnią się od szablonu podstawowego tylko w podpisach i semantyce funkcji, które przechowują i pobierają zwracaną wartość.
Szablony future
klas i shared_future
nigdy nie blokują w swoich destruktorach, z wyjątkiem jednego przypadku, który jest zachowany w celu zapewnienia zgodności z poprzednimi wersjami: w przeciwieństwie do wszystkich pozostałych przyszłości dla future
elementu — lub ostatniego shared_future
— dołączonego do zadania uruchomionego z std::async
, bloki destruktora, jeśli zadanie nie zostało ukończone; to znaczy, że blokuje, jeśli ten wątek nie został jeszcze wywołany .get()
lub .wait()
zadanie jest nadal uruchomione. Następująca uwaga dotycząca użyteczności została dodana do opisu std::async
w wersji roboczej standardu: "[Uwaga: Jeśli przyszłość uzyskana z std::async zostanie przeniesiona poza zakres lokalny, inny kod, który korzysta z przyszłości, musi być świadomy, że destruktor przyszłości może zablokować stan udostępniony do gotowości.— uwaga końcowa]" We wszystkich innych przypadkach, future
i shared_future
destruktory są wymagane i nie mają gwarancji, że nigdy nie blokuj.
Elementy członkowskie
Klasy
Nazwa/nazwisko | opis |
---|---|
future, klasa | Opisuje asynchroniczny obiekt zwracany. |
future_error, klasa | Opisuje obiekt wyjątku, który może być zgłaszany przez metody typów, które zarządzają future obiektami. |
packaged_task, klasa | Opisuje asynchronicznego dostawcę, który jest otoką wywołań i którego podpis wywołania to Ty(ArgTypes...) . Jego skojarzony stan asynchroniczny zawiera kopię jego wywoływanego obiektu oprócz potencjalnego wyniku. |
promise, klasa | Opisuje dostawcę asynchronicznego. |
shared_future, klasa | Opisuje asynchroniczny obiekt zwracany. W przeciwieństwie do future obiektu dostawca asynchroniczny może być skojarzony z dowolną liczbą shared_future obiektów. |
Struktury
Nazwa/nazwisko | opis |
---|---|
is_error_code_enum, struktura | Specjalizacja wskazująca, że future_errc jest odpowiednia do przechowywania elementu error_code . |
uses_allocator, struktura | Specjalizacja, która zawsze ma wartość true. |
Funkcje
Nazwa/nazwisko | opis |
---|---|
async | Reprezentuje dostawcę asynchronicznego. |
future_category | Zwraca odwołanie do error_category obiektu, który charakteryzuje błędy skojarzone z obiektami future . |
make_error_code | Tworzy obiekt error_code , który charakteryzuje error_category future błędy. |
make_error_condition | Tworzy obiekt error_condition , który charakteryzuje error_category future błędy. |
zamiana | Wymienia skojarzony stan asynchroniczny jednego promise obiektu z innym. |
Wyliczenia
Nazwa/nazwisko | opis |
---|---|
future_errc | Dostarcza symboliczne nazwy błędów zgłaszanych przez klasę future_error . |
future_status | Dostarcza nazwy symboliczne z powodów, dla których funkcja oczekiwania czasowego może zwrócić. |
uruchomić | Reprezentuje typ maski bitowej, który opisuje możliwe tryby dla funkcji async szablonu . |