|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Всем привет. Есть приложение которое делает некоторый расчет данных, данные помещает в очередь TaskQueue, затем запускается метод в отдельном потоке который асинхронно запускает хранимку в MS SQL 2008R2. Поскольку очередь вырастает до тысяч, то решено параллельно держать например 10(Maxtasks) вызовов. Но по факту в мониторе активности число соединений гораздо больше, что приводит к ошибке -"слишком много соединений на сессию" и потери соединения. Что не так? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2016, 11:22 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Kolu4ka, Дергай EndExecuteNonQuery в HandleCallback. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2016, 12:25 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
ЕвгенийВ, спасибо! Дернула (result.AsyncState as SqlCommand).EndExecuteNonQuery(result); в HandleCallback'е и все заработало. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2016, 14:38 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
async\await не позволяет религия использовать или какие то требования? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2016, 14:48 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Roman Mejtes, Visual Studio 2010 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2016, 15:05 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Roman Mejtesasync\await не позволяет религия использовать или какие то требования? Обсуждали уже - в ряде случаев (а у ТС как раз такой случай - очередь с тысячами экземпляров и параллельными вызовами) BeginXXX/EndXXX будет эффективнее async/await. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2016, 15:11 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныRoman Mejtesasync\await не позволяет религия использовать или какие то требования? Обсуждали уже - в ряде случаев (а у ТС как раз такой случай - очередь с тысячами экземпляров и параллельными вызовами) BeginXXX/EndXXX будет эффективнее async/await.Так ведь ничто не мешает использовать Task.FromAsync для преобразования BeginXXX/EndXXX в Task, чтобы при этом использовались I/O ports. Ну и если VS2010, то ничто не мешает использовать Task.ContinueWith вместо await. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 05:44 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Алексей КТак ведь ничто не мешает использовать Task.FromAsync для преобразования BeginXXX/EndXXX в Task, чтобы при этом использовались I/O ports. Я опять же, как в теме по ссылке выше, предполагаю, что речь идет об использовании async/await вместо BeginXXX/EndXXX, но не совместно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 06:11 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныАлексей КТак ведь ничто не мешает использовать Task.FromAsync для преобразования BeginXXX/EndXXX в Task, чтобы при этом использовались I/O ports. Я опять же, как в теме по ссылке выше, предполагаю, что речь идет об использовании async/await вместо BeginXXX/EndXXX, но не совместно. async/await все равно дернут внутри BeginXXX/EndXXX. Код станет толще и все, хотя удобнее вызов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 07:40 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
ЕвгенийВСон Веры Павловныпропущено... Я опять же, как в теме по ссылке выше, предполагаю, что речь идет об использовании async/await вместо BeginXXX/EndXXX, но не совместно. async/await все равно дернут внутри BeginXXX/EndXXX.Смотря как напишешь. ЕвгенийВКод станет толще и все, хотя удобнее вызов.Бывают случаи, когда удобство становится необходимостью. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 08:46 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Алексей КСмотря как напишешь. Вот дизасемблировал. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Алексей КБывают случаи, когда удобство становится необходимостью. Да кто же спорит :) Пусть работает компьютер, а я схожу покурю. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 10:33 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
ЕвгенийВАлексей КСмотря как напишешь. Вот дизасемблировал. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Там, конечно же, всё правильно. Но можно же написать и неправильно: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 10:55 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Алексей КТам, конечно же, всё правильно. Но можно же написать и неправильно: Код: c# 1. 2. 3. 4.
Так то оно так, только не научай человеков нехорошему :) Поток отдельный запустишь, может спасешь гуй от повисания, но тот поток все равно будет ждать и бездействовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 11:40 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
ЕвгенийВАлексей КТам, конечно же, всё правильно. Но можно же написать и неправильно: Код: c# 1. 2. 3. 4.
Так то оно так, только не научай человеков нехорошему :) Поток отдельный запустишь, может спасешь гуй от повисания, но тот поток все равно будет ждать и бездействовать.Так для того и приведён пример, чтобы показать, как не надо делать. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 11:53 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
Алексей К, а надо как написать, чтобы было правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 12:05 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
super-codeАлексей К, а надо как написать, чтобы было правильно?Примерно так, как привёл пример ЕвгенийВ, с использованием Task.Factory.FromAsync. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 12:27 |
|
Асинхронный вызов хранимки
|
|||
---|---|---|---|
#18+
super-codeАлексей К, а надо как написать, чтобы было правильно?С другой стороны, правильно - это что-то из области философии. В нашем случае различия в том, что или висит поток в ожидании I/O, или используется I/O port. Если висящий поток не является тонким местом, то оба способа являются правильными. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2016, 12:31 |
|
|
start [/forum/topic.php?fid=20&fpage=53&tid=1400262]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 150ms |
0 / 0 |