저는 비동기 작업을 제공하는 HTTP 서버 애플리케이션을 가지고 있습니다.
으아악사용자는 장기 실행 비동기 작업을 요청할 수 있으며 애플리케이션은 고루틴을 만든 후 즉시 요청에 응답합니다.
요청 ID, 인증된 토큰, 사용자 정보를 요청의 context.Context
中。而且,我想把它放在 goroutine 下。但是,对请求 context
使用相同的 context
에 넣었는데, 응답 후 예기치 않은 취소가 발생했는데, 이는 의도한 동작이 아닙니다.
고루틴의 응답을 가져온 후 죽지 않고 모든 값을 포함하는 새로운 context
,独立于父请求 context
?或者,还有其他方法可以保证 context
을 생성하는 방법은 무엇입니까?
보너스 질문:
Job1
~ Job3
应该被序列化,即 Job2
应该等待 Job1
和 Job3
等待 Job2
。并且,Job1A
和 Job1B
可以同时运行。如果我想传播给定 context
취소, 경로(?) 취소는 어떻게 하나요? 모든 기능에 대해 select 문을 확인해야 합니까?
무의미한 작업을 수행하지 않고 취소 및 조기 종료 개념을 전파하는 것을 이해합니다 context
. 그러나 코드에서 이를 처리하는 방법을 찾지 못했습니다. 누군가가 이해를 도울 수 있다면 기쁠 것입니다.
컨텍스트의 값을 찾을 수 없습니다. 맵으로 저장되지 않고 컨텍스트 레이어로 저장되며, 각 레벨은 잠재적으로 값이 저장되는 방식에 대한 다른 구현을 제공합니다.
그러나 어떤 값을 전파해야 하는지 알고 있다면 해당 값을 쿼리하고 해당 값으로 새 컨텍스트를 만들 수 있습니다.
즉, 다른 컨텍스트의 값을 사용하는 새로운 컨텍스트 유형을 구현할 수 있습니다.
으아악기존 값 컨텍스트를 사용하고 다른 모든 항목에는 새 컨텍스트를 사용합니다.
그런 다음 새 컨텍스트를 사용하여 요청 처리를 계속하려면 새 고루틴을 시작하세요.
여러 개의 동시 작업을 생성하려면 다음 고루틴에서 이를 수행할 수 있습니다.
으아악이렇게 하면 컨텍스트가 취소되면 두 작업 모두 취소 알림을 받게 됩니다. job1과 job2의 취소를 별도로 제어하려면:
으아악연속적인 작업의 경우(즉, job3이 job1 후에 종료됨) 하나의 작업처럼 보이도록 결합하기만 하면 됩니다.
컨텍스트가 취소되었는지 확인하려면 컨텍스트의 Done
通道上执行 select
에서 이를 수행하거나 다음을 확인하면 됩니다.
위 내용은 Golang은 컨텍스트의 모든 값을 복사합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!