#c# #.net #amazon-s3
#c# #.net #amazon-s3 #amazon-веб-сервисы
Вопрос:
Является ли Amazon . AmazonS3
Потокобезопасен ли NET AWS SDK или мне следует создавать новый экземпляр AmazonS3
для каждого запроса в многопоточной системе?
Специально для последней версии .NET AWS SDK (версия 1.3.14).
Комментарии:
1. Вы можете определить это самостоятельно. если основной поток пользовательского интерфейса заблокирован во время обработки запроса, то он не потокобезопасен. Я никогда раньше не слышал термин «потокобезопасный клиент»
2. @Ramhound Я не понимаю, как связаны потокобезопасность и блокирующий API. Также может даже не существовать потока пользовательского интерфейса, например, если клиент является консольным приложением. Таким образом, ваш комментарий имеет еще меньше смысла.
3. @Ramhound Спасибо за комментарий, я неправильно сформулировал заголовок и вопрос. При работе с
AmazonS3
объектом я думаю о нем как о »AmazonS3
клиенте», я не имел в виду «потокобезопасность клиента» как собирательный термин. Вопрос и название теперь скорректированы. Что касается вашего предложения — я не уверен, что это можно использовать для оценки «потокобезопасности». Например, если я создам функцию с блокировками внутри нее, при ее вызове она заблокируется в ожидании блокировки, но она вполне может быть потокобезопасной, поскольку несколько потоков могут вызывать ее без «повреждения» ее внутренних общих данных / состояния.
Ответ №1:
Я также задавал этот вопрос на форуме Amazon AWS, и официальный сотрудник AWS ответил (Norm @ AWS) с:
.NET SDK потокобезопасен, поэтому можно сохранить экземпляр любого из клиентов, таких как AmazonS3, и использовать их повторно.
Норма
Ссылка (Amazon.Форум NET Development — Безопасен ли поток AmazonS3 в .NET SDK?).
Комментарии:
1. Может ли кто-нибудь подтвердить, что это все еще верно? Ответ рассчитан на 10 лет 🙂
2. Некоторую дополнительную информацию можно найти здесь: github.com/aws/aws-sdk-net/issues/1544
Ответ №2:
Я создаю новый экземпляр в каждом потоке, и он работает нормально. Честно говоря, я думаю, что это безопасно для каждого вызова, включая асинхронные вызовы.
Комментарии:
1. Если вы создаете новый экземпляр для каждого потока, это не соответствует определению потокобезопасности … Потокобезопасность означает, что один и тот же экземпляр может быть общим для нескольких потоков и использоваться одновременно.