Re[4]: Tasks
От: swimmers  
Дата: 20.04.20 10:29
Оценка:
Здравствуйте, Danchik, Вы писали:

D>А они типа не используют потоки. Даже одна таска запускается в разных потоках во время своей жизни.

Разве выделенное всегда верно?
D>Тут у вас получается что в Task Secheduler добавилось два таска. Один пошел к базе, задержался на IO операции, второй начал работу, тоже полез к базе, нарвался исключение DataProvider.

S>>В библиотеке сделано множество ХххAsync расширений. Но по факту получается, что пользоваться ими в полной мере нельзя. Печально немного.


D>Хотите два паралельно работающих таска — создавайте два конекшина. Их создание дешевая операция.

D>Мы конечно можем поддержать здесь MARS, но это не лучшее решение, количество таких конекшинов ограничено да и не все провайдеры поддерживают.

D>С нашей стороны было бы неплохо выбросить правильное исключение если это возможно.


Вот коллега romangr чуть выше покопался в исходниках и пишет:

Немного покопав исходники linq2db видно, что при выполнении запросов DataConnection не создает на каждый запрос новую DbCommand, а переиспользует уже имеющуюся,
(смотреть реализацию свойства Command и метод InitCommand) что и приводит к такому поведению.

Он не прав?
Если создавать по новому DbCommand на запрос — будет работать?

D>Потом захочется два апдейта запустить паралельно — блокировать второй пока первый не прошел? Тогда зачем весь этот цирк c WhenAll?

Блокировки оставить на откуп СУБД и пользователю библиотеки. Как напишет, так СУБД пусть и исполняет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.