Size: a a a

Эликсир и Вунш

2018 December 18

M

Moi_nik in Эликсир и Вунш
Спасибо. Ушел курить доки.
источник

DK

Denis Kharchuk in Эликсир и Вунш
Главное  в транзакции не делать Task.start, тогда rollback не откатит инсерты
источник

AV

Andrew Volozhanin in Эликсир и Вунш
и если вручную идти через Repo.transaction(fn -> end), то не стоит забывать о ручном вызове Repo.rollback.
а то после Multi у меня был баг, что внутри транзакции был with, который возвращал error, но не вызывал rollback.
в результате Repo.transaction возвращало {:ok, {:error, _}} как ни в чем не бывало
источник

K

Konstantin in Эликсир и Вунш
Denis Kharchuk
Главное  в транзакции не делать Task.start, тогда rollback не откатит инсерты
разве это не на уровне БД ? если делать Task.async() |> Task.await() должно же работать
источник

DK

Denis Kharchuk in Эликсир и Вунш
С Task.async() |> Task.await() не тэстил но с Task.start точно не будет работать
источник

AV

Andrew Volozhanin in Эликсир и Вунш
Task.start в принципе лучше не юзать
источник

DK

Denis Kharchuk in Эликсир и Вунш
Если я не жду результат то почему бы и нет
источник

AV

Andrew Volozhanin in Эликсир и Вунш
источник

AV

Andrew Volozhanin in Эликсир и Вунш
По сути для более чистого cleanup процессов
источник

AV

Andrew Volozhanin in Эликсир и Вунш
Но это конечно достаточно edge case
источник

K

Konstantin in Эликсир и Вунш
Denis Kharchuk
Если я не жду результат то почему бы и нет
ну там ты не можешь гарантировать, что попадет запрос в транзакцию. поэтому и не откатывает
источник

K

Konstantin in Эликсир и Вунш
Andrew Volozhanin
Task.start в принципе лучше не юзать
почему ?
источник

AV

Andrew Volozhanin in Эликсир и Вунш
Konstantin
почему ?
Выше скинул ссылку на пост
источник

K

Konstantin in Эликсир и Вунш
тут очень сложный вопрос использования. Task.start очень полезная функция, но нужно знать что именно делается в нем и как он поведет себя в случае чего.
источник

K

Konstantin in Эликсир и Вунш
даже в доках написано, чо это сделано для различных side-effects, когда не важен результат действия
источник

AV

Andrew Volozhanin in Эликсир и Вунш
Да да, это все применимо и к task.supervisor.start_link.
источник

K

Konstantin in Эликсир и Вунш
ну к стати в плане использования Task.start/1 в работе с БД - соглашусь. там может все пойти сильно не так в случае отмирания ecto супервизора.
источник

AV

Andrew Volozhanin in Эликсир и Вунш
в таком случае Task.start_link по-идее по цепочке должен тоже умереть, если ecto.supervisor убился
источник

AV

Andrew Volozhanin in Эликсир и Вунш
я думаю бОльшая проблема с Task внутри транзации - не понятно как их rollback делать
источник

AV

Andrew Volozhanin in Эликсир и Вунш
например база выкинула exception во время коммита транзакции
источник