private static async Task <AmazonS3Client> SwitchClient(AmazonS3Client s3Client)
        {
            RegionEndpoint regionEp  = null;
            string         uniqueKey =
                string.Format(CultureInfo.InvariantCulture, "{0}_{1}", accessKeyId,
                              bucketName); // GetUniqueNameFromAccessKeyIdAndBucketName


            GetBucketLocationResponse resp = await s3Client.GetBucketLocationAsync(bucketName);

            if (resp == null)
            {
                return(s3Client);
            }
            else
            {
                regionEp = RegionToEndpoint(resp.Location);
            }

            if (regionEp != null && !regionEp.Equals(s3Client.Config.RegionEndpoint))
            {
                s3Client.Dispose();
                AmazonS3Config config = new AmazonS3Config()
                {
                    Timeout          = TimeSpan.FromSeconds(300),
                    ReadWriteTimeout = TimeSpan.FromSeconds(600),
                    RegionEndpoint   = regionEp
                };
                var credential = new BasicAWSCredentials(accessKeyId, secretAccessKey);
                s3Client = new AmazonS3Client(credential, config);
            }

            return(s3Client);
        }