#java #amazon-web-services #amazon-s3 #aws-sdk #aws-java-sdk
#java #amazon-веб-сервисы #amazon-s3 #aws-sdk #aws-java-sdk
Вопрос:
Я рассматриваю пример использования, приведенный в документах AWS SDK для TransferManager, в частности, для следующего кода:
TransferManager tx = new TransferManager(
credentialProviderChain.getCredentials());
Upload myUpload = tx.upload(myBucket, myFile.getName(), myFile);
// Transfers also allow you to set a <code>ProgressListener</code> to receive
// asynchronous notifications about your transfer's progress.
myUpload.addProgressListener(myProgressListener);
и мне интересно, нет ли у нас здесь случая состояния гонки. AFAIU TransferManager
работает асинхронно, он может начать загрузку файла сразу после создания Upload
объекта, даже до того, как мы добавим прослушиватель, поэтому, если мы используем фрагмент, как указано в документации, возможно, мы не будем получать все уведомления. Я кратко ознакомился с addProgressListener
и не вижу там, что прошлые события будут воспроизводиться при подключении нового слушателя. Я ошибаюсь? Я что-то упустил?
Ответ №1:
Если вам нужно получить ВСЕ события, я полагаю, это может быть достигнуто с помощью другого upload
метода, который принимает a в ProgressListener
качестве параметра. Конечно, использование этого метода потребует инкапсуляции вашего bucketname, ключа и файла в экземпляр PutObjectRequest
.
Комментарии:
1. Итак, я отчасти прав? Я видел метод, который вы связали, и я планирую его использовать. Я просто пытаюсь подтвердить свои рассуждения или выяснить, что я ошибся.
2. Я бы предположил, что есть много ситуаций, когда люди в первую очередь заинтересованы в том, чтобы узнать, когда их передача успешно завершена, и меньше заинтересованы в том, чтобы они получали все события, которые будет поддерживать ProgressListener. Я просто рассматриваю это как перегруженный метод для поддержки различных вариантов использования.
3. Другими словами, вы, вероятно, правы в том, что необязательно получать все события, но авторы предполагают, что в большинстве случаев это не имеет значения.
4. О, это, в конечном счете, моя цель — неблокирующим образом узнать о завершении загрузки — сбой или успех. Подумал, что слушатель прогресса — это правильный путь.