Wyrażenie branch rozpoczyna blok składający się z co najmniej jednego asynchronicznego wyrażenia podrzędnego, a każde następujące po nim wyrażenie jest wykonywane natychmiast, bez oczekiwania na ukończenie wykonywania wyrażeń branch.
Wyrażenie branch można zastosować zasadniczo do dowolnego natychmiastowego asynchronicznego bloku kodu, który chcemy potraktować na zasadzie "odpal i zapomnij", gdy blok ten musi zostać wywołany w kontekście asynchronicznym.
branch:
# This block continues until completed
AsyncFunction1() # Starts effectively the same time as AsyncFunction3()
Method1() # Block can be mixed with immediate expressions
AsyncFunction2()
AsyncFunction3() # Starts effectively the same time as AsyncFunction1()
# If branch block task is still running when AsyncFunction3 completes
# then any remaining branch task is canceledPoniższy kod przedstawia składnię dla wyrażenia branch.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1Poniższy schemat przedstawia przepływ, zgodnie z którym wykonywane są wyrażenia.
Jest on zbliżony do wyrażenia spawn o nieustrukturyzowanej współbieżności, jednak wyrażenie branch dopuszcza użycie dowolnego kodu i jest dopuszczalne tylko w obrębie otaczającego je kontekstu asynchronicznego, który jednocześnie ogranicza to wyrażenie. W związku z tym w miarę możliwości preferuje się użycie wyrażenia branch zamiast wyrażenia spawn.
Użycie wyrażenia branch
Gdzie można użyć wyrażenia | |
Czas wywoływania wyrażenia | Natychmiastowe |
Wymagania dotyczące bloku kodu | Wyrażenie |
Co wykonuje wyrażenie | Ciało wyrażenia |
Czas ukończenia wyrażenia | Wyrażenie |
Kiedy rozpoczyna się kolejne wyrażenie po wyrażeniu | Każde wyrażenie następujące po wyrażeniu |
Wynik wyrażenia | Wyrażenie |
Obecnie nie można używać wyrażenia branch w ciele wyrażenia iteracyjnego, takiego jak loop lub for. Jeśli konieczne jest jego użycie, należy otoczyć je funkcją asynchroniczną, a następnie ustawić wywołanie tej funkcji z wyrażenia iteracyjnego.