I am using the latest version of Microsoft.CrmSdk.XrmTooling.CoreAssembly.9.1.0.108
My service use multiple Dynamics 365 users, so I cached a CrmServiceClient instance for every user.

But I can't find a proper way how to update a token when it has expired.

OrganizationService.CheckIfTokenIsExpired  is deprecated.

This is my connection cache code
        private static readonly Dictionary<string, CrmServiceClient> _crmClientCache = new Dictionary<string, CrmServiceClient>();

        private static readonly Object _orgServiceLock = new Object();

        private static readonly string _authType = "OAuth";
        private static readonly string _requireNewInstance = "true";
        private static readonly string _appId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
        private static readonly string _reDirectURI = "app://58145B91-0C36-4500-8554-080854F2AC97";


        public static CrmServiceClient GetCrmClient(string userName, string password, string url)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            string ConnectionString = string.Format("AuthType={0};Username={1};Password={2};Url={3};AppId={4};RedirectUri={5};RequireNewInstance={6};",
            _authType, userName, password, url, _appId, _reDirectURI, _requireNewInstance);

            CrmServiceClient crmClient;

            lock (_orgServiceLock)
            {
                if (!_crmClientCache.ContainsKey(ConnectionString))
                {
                    crmClient = new CrmServiceClient(ConnectionString);
                    _crmClientCache.Add(ConnectionString, crmClient);
                }
            }

            crmClient = _crmClientCache[ConnectionString];

            if (crmClient.IsReady)
            {
                return crmClient;
            }
            throw new Exception(crmClient.LastCrmError);
        }
Thanks for help!