feat(gRPC): add monitor goroutine for each gRPC client stream #1650
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What type of PR is this?
feat
Check the PR title.
(Optional) Translate the PR title into Chinese.
feat(gRPC): 为每个 gRPC 的 client stream 添加一个监测 goroutine
(Optional) More detailed description for this PR(en: English/zh: Chinese).
en:
Currently either the user calls the
cancel
function, or the parent stream is cancelled:Users have to call
stream.Recv()
to detect if the ctx has been cancelled and close the stream, which is not intuitive.Therefore, each stream is equipped with a monitoring goroutine that detects if the ctx is cancelled and automatically triggers the logic to close the stream.
Unary must call
stream.Recv()
, so there is no need to create a monitoring goroutine.zh(optional):
当前无论是用户主动调用
cancel
函数,还是父 stream 被 cancel:都需要用户主动调用
stream.Recv()
来检测 ctx 是否被 cancel,从而关闭流,这样很不符合直觉。因此为每个 stream 配备一个监测 goroutine 用来检测 ctx 是否被 cancel,从而自动地触发关闭流的逻辑。
unary 必定会调用
stream.Recv
,因此不需要配备。(Optional) Which issue(s) this PR fixes:
(optional) The PR that updates user documentation: