Guidance for implementors:
This method doesn't wait for all calls on this channel to finish (nor does
it have to explicitly cancel all outstanding calls). It is user's responsibility to make sure
all the calls on this channel have finished (successfully or with an error)
before shutting down the channel to ensure channel shutdown won't impact
the outcome of those remote calls.
ShutdownAsyncCore()
protected virtual Task ShutdownAsyncCore()
Provides implementation of a non-virtual public member.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[[["\u003cp\u003e\u003ccode\u003eChannelBase\u003c/code\u003e is an abstract base class in gRPC for managing long-lived connections to remote servers, providing a foundation for creating channels.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eChannelBase\u003c/code\u003e class has a constructor that accepts a target string, which represents the address of the server the channel will connect to.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eCreateCallInvoker()\u003c/code\u003e method enables the creation of a new \u003ccode\u003eCallInvoker\u003c/code\u003e for the channel, facilitating the invocation of remote procedures.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eShutdownAsync()\u003c/code\u003e method is available for properly shutting down the channel once it is no longer required, and it's highly recommended to shut it down after use.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eTarget\u003c/code\u003e property in \u003ccode\u003eChannelBase\u003c/code\u003e stores the original target that was used during channel creation, allowing access to the connection address.\u003c/p\u003e\n"]]],[],null,["# Class ChannelBase (2.66.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.66.0 (latest)](/dotnet/docs/reference/Grpc.Core/latest/Grpc.Core.ChannelBase)\n- [2.63.0](/dotnet/docs/reference/Grpc.Core/2.63.0/Grpc.Core.ChannelBase)\n- [2.48.0](/dotnet/docs/reference/Grpc.Core/2.48.0/Grpc.Core.ChannelBase) \n\n public abstract class ChannelBase\n\nBase class for gRPC channel. Channels are an abstraction of long-lived connections to remote servers. \n\nInheritance\n-----------\n\n[object](https://learn.microsoft.com/dotnet/api/system.object) \\\u003e ChannelBase \n\nInherited Members\n-----------------\n\n[object.Equals(object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)) \n[object.Equals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)) \n[object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode) \n[object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype) \n[object.MemberwiseClone()](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone) \n[object.ReferenceEquals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals) \n[object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)\n\nNamespace\n---------\n\n[Grpc.Core](/dotnet/docs/reference/Grpc.Core/latest/Grpc.Core)\n\nAssembly\n--------\n\nGrpc.Core.Api.dll\n\nConstructors\n------------\n\n### ChannelBase(string)\n\n protected ChannelBase(string target)\n\nInitializes a new instance of [ChannelBase](/dotnet/docs/reference/Grpc.Core/latest/Grpc.Core.ChannelBase) class that connects to a specific host.\n\nProperties\n----------\n\n### Target\n\n public string Target { get; }\n\nThe original target used to create the channel.\n\nMethods\n-------\n\n### CreateCallInvoker()\n\n public abstract CallInvoker CreateCallInvoker()\n\nCreate a new [CallInvoker](/dotnet/docs/reference/Grpc.Core/latest/Grpc.Core.CallInvoker) for the channel.\n\n### ShutdownAsync()\n\n public Task ShutdownAsync()\n\nShuts down the channel cleanly. It is strongly recommended to shutdown\nthe channel once you stopped using it.\n\n**Remarks** \nGuidance for implementors:\nThis method doesn't wait for all calls on this channel to finish (nor does\nit have to explicitly cancel all outstanding calls). It is user's responsibility to make sure\nall the calls on this channel have finished (successfully or with an error)\nbefore shutting down the channel to ensure channel shutdown won't impact\nthe outcome of those remote calls.\n\n### ShutdownAsyncCore()\n\n protected virtual Task ShutdownAsyncCore()\n\nProvides implementation of a non-virtual public member.\n\nExtension Methods\n-----------------\n\n[ChannelExtensions.Intercept(ChannelBase, Interceptor)](/dotnet/docs/reference/Grpc.Core/latest/Grpc.Core.Interceptors.ChannelExtensions#Grpc_Core_Interceptors_ChannelExtensions_Intercept_Grpc_Core_ChannelBase_Grpc_Core_Interceptors_Interceptor_) \n[ChannelExtensions.Intercept(ChannelBase, params Interceptor\\[\\])](/dotnet/docs/reference/Grpc.Core/latest/Grpc.Core.Interceptors.ChannelExtensions#Grpc_Core_Interceptors_ChannelExtensions_Intercept_Grpc_Core_ChannelBase_Grpc_Core_Interceptors_Interceptor___) \n[ChannelExtensions.Intercept(ChannelBase, Func\\\u003cMetadata, Metadata\\\u003e)](/dotnet/docs/reference/Grpc.Core/latest/Grpc.Core.Interceptors.ChannelExtensions#Grpc_Core_Interceptors_ChannelExtensions_Intercept_Grpc_Core_ChannelBase_System_Func_Grpc_Core_Metadata_Grpc_Core_Metadata__)"]]