|
|
|
@ -34,6 +34,9 @@ namespace Grpc.Core.Internal |
|
|
|
|
readonly CallInvocationDetails<TRequest, TResponse> details; |
|
|
|
|
readonly INativeCall injectedNativeCall; // for testing |
|
|
|
|
|
|
|
|
|
// Dispose of to de-register cancellation token registration |
|
|
|
|
IDisposable cancellationTokenRegistration; |
|
|
|
|
|
|
|
|
|
// Completion of a pending unary response if not null. |
|
|
|
|
TaskCompletionSource<TResponse> unaryResponseTcs; |
|
|
|
|
|
|
|
|
@ -320,6 +323,7 @@ namespace Grpc.Core.Internal |
|
|
|
|
protected override void OnAfterReleaseResources() |
|
|
|
|
{ |
|
|
|
|
details.Channel.RemoveCallReference(this); |
|
|
|
|
cancellationTokenRegistration?.Dispose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected override bool IsClient |
|
|
|
@ -405,7 +409,7 @@ namespace Grpc.Core.Internal |
|
|
|
|
var token = details.Options.CancellationToken; |
|
|
|
|
if (token.CanBeCanceled) |
|
|
|
|
{ |
|
|
|
|
token.Register(() => this.Cancel()); |
|
|
|
|
cancellationTokenRegistration = token.Register(() => this.Cancel()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|