Асинхронный вызов веб-службы с общими ресурсами - PullRequest
1 голос
/ 13 июня 2011

У меня есть тестовый веб-сервис, который я вызываю асинхронно.Я удивлен, что он работает нормально, хотя есть (не ленивый) синглтон, в котором метод get не имеет блокировки.

Например, в моем веб-сервисе есть синглтон с GetМетод (без блокировки), который вызывает ранее установленную Фабрику, затем фабрика создает новый объект из предварительно установленного подробного объекта и возвращает новый объект.

Таким образом, код будет действовать следующим образом:

MethodCalledFromSingleton{
    Instantiate Obj A
    Use stored object to set properties of Obj A
    Instantiate Object B
    Assign Object B to a property of Object A
    Return Object A
}

В явно многопоточной среде один поток может создать экземпляр объекта, затем, прежде чем он вернется, другой поток может создать экземпляр другого объекта, а затем оба вернуть.Разве оба потока не могут указывать на одну и ту же ссылку?

Однако, как я уже сказал, у меня не возникает никаких проблем, поэтому концептуально асинхронные вызовы веб-службы работают иначе, чем явная обработка кода?

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Это зависит от того, какие асинхронные вызовы вы используете.Если вы используете асинхронный шаблон на основе событий, синхронизация выполняется автоматически, поэтому завершенное событие запускается в том же потоке, который инициировал вызов.

Мне не удалось найти надежную документацию по нему,но это поведение я обнаружил, когда копался в нем, см. Какой поток вызывает обработчик завершенных событий при вызовах WCF silverlight? .

Редактировать

Документация, подтверждающаязавершенное событие, вызываемое в нужном потоке, можно найти в разделе «Потоки и контексты» http://msdn.microsoft.com/en-us/library/ms228974.aspx.

0 голосов
/ 13 июня 2011

Ну, это сильно зависит от того, что на самом деле происходит в методе "get" ;-).Он может работать нормально без синхронизации.

Это также зависит от конфигурации вашего веб-сервера - может быть, он настроен на запуск только одного потока?

Я должен признать, что для меня не совсем понятно, чтоАсинхронный вызов веб-службы.Я предполагаю, что вы просто делаете серию звонков, не дожидаясь завершения предыдущего /

...