public async Task AcquireTokenWithDeviceFlowAsync()

in CredentialProvider.Microsoft/CredentialProviders/Vsts/AdalTokenProvider.cs [33:60]


        public async Task<IAdalToken> AcquireTokenWithDeviceFlowAsync(Func<DeviceCodeResult, Task> deviceCodeHandler, CancellationToken cancellationToken, ILogger logger)
        {
            var authenticationContext = new AuthenticationContext(authority, tokenCache);

            var deviceCode = await authenticationContext.AcquireDeviceCodeAsync(resource, clientId);
            cancellationToken.ThrowIfCancellationRequested();

            if (deviceCodeHandler != null)
            {
                await deviceCodeHandler(deviceCode);
                cancellationToken.ThrowIfCancellationRequested();
            }

            AuthenticationResult result = null;
            var deviceFlowTimeout = EnvUtil.GetDeviceFlowTimeoutFromEnvironmentInSeconds(logger);
            var task = authenticationContext.AcquireTokenByDeviceCodeAsync(deviceCode);

            if (await Task.WhenAny(task, Task.Delay(deviceFlowTimeout*1000, cancellationToken)) == task)
            {
                result = await task;
            }
            else
            {
                logger.Error(string.Format(Resources.DeviceFlowTimedOut, deviceFlowTimeout));
            }

            return new AdalToken(result);
        }