branch 표현식은 하나 이상의 비동기화 서브표현식 블록을 시작하며, 뒤따르는 표현식은 branch 표현식의 완료를 기다리지 않고 즉시 실행됩니다.
기본적으로 branch 를 사용하여 비동기화 코드 블록을 즉시 파이어 앤 포겟되는 것처럼 처리할 수 있지만, 비동기화 코드 블록은 여전히 비동기화 컨텍스트 내에서 호출되어야 합니다.
branch:
# 이 블록은 완료될 때까지 계속됩니다.
AsyncFunction1() # AsyncFunction3()과 동시에 효과적으로 시작됩니다.
Method1() # 블록은 즉시 표현식과 혼합될 수 있습니다.
AsyncFunction2()
AsyncFunction3() # AsyncFunction1()과 동시에 효과적으로 시작됩니다.
# AsyncFunction3 완료 후에도 branch 블록 작업이 계속 실행 중인 경우
# 남은 branch 작업은 모두 취소됩니다.
다음 코드는 branch 표현식의 구문을 보여줍니다.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1
아래 다이어그램은 표현식의 실행 플로를 보여줍니다.
비구조적 동시성 spawn 표현식과 유사하지만 branch 는 임의 코드 블록을 허용하며 감싸는 비동기화 컨텍스트 내에서만 허용되고 감싸는 비동기화 컨텍스트로 바운드됩니다. 이 때문에 가능한 모든 경우에 spawn 보다 branch 가 선호됩니다.
branch 표현식 사용
branch 표현식을 사용할 수 있는 경우 |
비동기화 컨텍스트 |
branch 표현식의 인보크 시간 |
즉시 |
branch 코드 블록 요구 사항 |
branch 표현식은 최소 하나의 비동기화 표현식을 가져야 합니다. |
branch 표현식의 기능 |
branch 표현식의 바디는 만나는 즉시 시작됩니다. branch 표현식 바디는 코드 블록이 완료되거나 감싸는 비동기화 컨텍스트가 완료될 때까지(둘 중 하나가 먼저 완료될 때까지) 계속 평가되며, 이 시점에 branch 코드 블록 작업은 취소됩니다. |
branch 표현식 완료 시기 |
branch 표현식은 즉시 완료됩니다. |
branch 이후 다음 표현식의 시작 시기 |
branch 표현식 이후의 표현식은 즉시 시작됩니다. |
branch 표현식의 결과 |
branch 표현식은 결과가 없으므로 결과 타입은 void 입니다. |
branch 표현식은 loop 또는 for 등 반복작업 표현식의 바디에서는 현재 사용되지 않을 수 있습니다. 반드시 사용해야 하는 경우 비동기화 함수로 감싸고 반복작업 표현식이 해당 함수를 호출하게 합니다.