golang에서는 채널 작업 취소가 일반적인 요구 사항입니다. 동시 작업을 처리할 때 작업 ID를 기반으로 실행 중인 작업을 취소해야 하는 경우가 있습니다. 그렇다면 golang에서 이 기능을 어떻게 구현할까요? 아래에서는 간단하고 효과적인 방법을 소개하겠습니다. 먼저 작업 ID를 저장할 버퍼링된 채널을 만들어야 합니다. 그런 다음 select 문을 사용하여 채널의 읽기 작업을 수신하고 작업을 취소해야 할 때 작업 ID를 채널로 보낼 수 있습니다. 그런 다음 작업 실행 기능에서 채널이 닫혔는지 여부를 판단하여 작업을 취소해야 하는지 여부를 결정할 수 있습니다. 채널이 닫히면 작업이 취소되고 적절한 위치에서 작업 실행을 종료할 수 있습니다. 이런 식으로 golang의 ID를 기반으로 채널 작업을 쉽게 취소할 수 있습니다. 위 내용은 PHP 에디터 Xinyi님이 소개한 방법인데, 모든 분들께 도움이 되었으면 좋겠습니다!
그래서 저한테 하나 있어요post
端点,它创建一个作业并将它们添加到一个 chan 中。 workerjobschan = make(chan job, maxqueuesize)
채널에서 제가 일하는 방식은 다음과 같습니다(main.go
):
지도에 취소 기능을 저장합니다: canceljobfuncs = make(map[int]context.cancelfunc)
.
직무는 다음과 같습니다.
으아악다음과 같이 (http 처리기에서) 컨텍스트를 취소합니다.
으아악하지만 작업은 계속 실행됩니다. 나는 많은 것을 시도했지만 제대로 작동하지 않는 것 같습니다.
다음은 명확한 요점을 설명하는 방법입니다. 코드가 ctx.done()
를 확인하지 않으면 코드가 취소되었음을 알 수 있는 방법이 없습니다.
(그런데 이것은 @jimb이 귀하의 질문에 대한 의견에 쓴 내용의 또 다른 의역입니다.)
그래서 .execute(...)
메소드의 코드가 이 블록을 실행하기 시작하면:
블록 끝에 도달합니다(7초). 취소 시 중지하라는 지시가 없습니다.
"sleep" 명령 중에 함수가 취소를 감지할 수 있도록 하려면 코드를 변경해야 합니다.
예제를 사용하여 이 작업을 수행하는 방법의 예는 다음과 같습니다.
으아악https://www.php.cn/link/3bc31a430954d8326605fc690ed22f4d
실제 코드에는 time.sleep()
指令,而是 processsearch(...)
或 doquery(...)
또는 ...
실행 중에 이러한 함수를 취소할 수 있어야 하는 경우 취소 컨텍스트를 함수에 전달하고 어떤 방식으로든 취소를 확인하도록 해야 합니다.
컨텍스트를 전달하는 한 가지 방법은 해당 함수의 매개변수에 컨텍스트를 추가하는 것입니다.
으아악그러나 기존 코드에 따라 일부 매개변수에는 취소할 수 있는 메서드가 이미 내장되어 있을 수도 있습니다.
예:
위 내용은 golang에서 ID를 기반으로 채널 작업을 취소하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!