@@ -2303,53 +2303,16 @@ internal void OnManagedConnectionFailed(object sender, ConnectionFailedEventArgs
23032303 {
23042304 SwitchMaster ( e . EndPoint , connection ) ;
23052305 } , null , TimeSpan . FromSeconds ( 0 ) , TimeSpan . FromSeconds ( 1 ) ) ;
2306-
2307- //connection.sentinelMasterReconnectTimer.AutoReset = true;
2308-
2309- //connection.sentinelMasterReconnectTimer.Start();
23102306 }
23112307 }
23122308
2313- internal EndPoint GetConfiguredMasterForService ( string serviceName , int timeoutmillis = - 1 )
2314- {
2315- Task < EndPoint > [ ] sentinelMasters = GetServerSnapshot ( ) . ToArray ( )
2316- . Where ( s => s . ServerType == ServerType . Sentinel )
2317- . Select ( s => GetServer ( s . EndPoint ) . SentinelGetMasterAddressByNameAsync ( serviceName ) )
2318- . ToArray ( ) ;
2319-
2320- Task < Task < EndPoint > > firstCompleteRequest = WaitFirstNonNullIgnoreErrorsAsync ( sentinelMasters ) ;
2321- if ( ! firstCompleteRequest . Wait ( timeoutmillis ) )
2322- throw new TimeoutException ( "Timeout resolving master for service" ) ;
2323- if ( firstCompleteRequest . Result ? . Result == null )
2324- throw new Exception ( "Unable to determine master" ) ;
2325-
2326- return firstCompleteRequest . Result . Result ;
2327- }
2328-
2329- private static async Task < Task < T > > WaitFirstNonNullIgnoreErrorsAsync < T > ( Task < T > [ ] tasks )
2330- {
2331- if ( tasks == null ) throw new ArgumentNullException ( "tasks" ) ;
2332- if ( tasks . Length == 0 ) return null ;
2333- var typeNullable = ( Nullable . GetUnderlyingType ( typeof ( T ) ) != null ) ;
2334- var taskList = tasks . Cast < Task > ( ) . ToList ( ) ;
2335-
2336- try
2337- {
2338- while ( taskList . Count > 0 )
2339- {
2340- var allTasksAwaitingAny = Task . WhenAny ( taskList ) . ObserveErrors ( ) ;
2341- var result = await allTasksAwaitingAny . ForAwait ( ) ;
2342- taskList . Remove ( ( Task < T > ) result ) ;
2343- if ( ( ( Task < T > ) result ) . IsFaulted ) continue ;
2344- if ( ( ! typeNullable ) || ( ( Task < T > ) result ) . Result != null )
2345- return ( Task < T > ) result ;
2346- }
2347- }
2348- catch
2349- { }
2350-
2351- return null ;
2352- }
2309+ internal EndPoint GetConfiguredMasterForService ( string serviceName ) =>
2310+ GetServerSnapshot ( )
2311+ . ToArray ( )
2312+ . Where ( s => s . ServerType == ServerType . Sentinel )
2313+ . AsParallel ( )
2314+ . Select ( s => GetServer ( s . EndPoint ) . SentinelGetMasterAddressByName ( serviceName ) )
2315+ . First ( r => r != null ) ;
23532316
23542317 internal EndPoint currentSentinelMasterEndPoint ;
23552318
@@ -2419,26 +2382,22 @@ private T Retry<T>(int times, int interval, Func<T> func, string message)
24192382 throw new NullReferenceException ( message ) ;
24202383 }
24212384
2422- internal void UpdateSentinelAddressList ( string serviceName , int timeoutmillis = 500 )
2385+ internal void UpdateSentinelAddressList ( string serviceName )
24232386 {
2424- Task < EndPoint [ ] > [ ] sentinels = GetServerSnapshot ( ) . ToArray ( )
2425- . Where ( s => s . ServerType == ServerType . Sentinel )
2426- . Select ( s => GetServer ( s . EndPoint ) . SentinelGetSentinelAddresses ( serviceName ) )
2427- . ToArray ( ) ;
2428-
2429- Task < Task < EndPoint [ ] > > firstCompleteRequest = WaitFirstNonNullIgnoreErrorsAsync ( sentinels ) ;
2387+ var firstCompleteRequest = GetServerSnapshot ( )
2388+ . ToArray ( )
2389+ . Where ( s => s . ServerType == ServerType . Sentinel )
2390+ . AsParallel ( )
2391+ . Select ( s => GetServer ( s . EndPoint ) . SentinelGetSentinelAddresses ( serviceName ) )
2392+ . First ( r => r != null ) ;
24302393
24312394 // Ignore errors, as having an updated sentinel list is
24322395 // not essential
2433- if ( firstCompleteRequest . Result ? . Result == null )
2434- return ;
2435- if ( ! firstCompleteRequest . Wait ( timeoutmillis ) )
2436- return ;
2437- if ( firstCompleteRequest . Result . Result == null )
2396+ if ( firstCompleteRequest == null )
24382397 return ;
24392398
24402399 bool hasNew = false ;
2441- foreach ( EndPoint newSentinel in firstCompleteRequest . Result . Result . Where ( x => ! RawConfig . EndPoints . Contains ( x ) ) )
2400+ foreach ( EndPoint newSentinel in firstCompleteRequest . Where ( x => ! RawConfig . EndPoints . Contains ( x ) ) )
24422401 {
24432402 hasNew = true ;
24442403 RawConfig . EndPoints . Add ( newSentinel ) ;
0 commit comments