Является ли Amazon .Потокобезопасен AmazonS3 в NET AWS SDK?

#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. Если вы создаете новый экземпляр для каждого потока, это не соответствует определению потокобезопасности … Потокобезопасность означает, что один и тот же экземпляр может быть общим для нескольких потоков и использоваться одновременно.