spritefullake

spritefullake

Phoenix Liveview using Task.Supervisor.async_nolink vs PubSub for a long worker

I have a long task I need to run to basically compute something realtime as a user scrolls a PDF. What is the best way I should be structuring my calling code for the external api? I started off using async_nolink but I noticed that it seems I can’t name the tasks and there are timeout issues unless I modify the supervisor config. Would using PubSub be appropriate for this usecase? Just begin the external api call from the liveview handle_event and then when the task is completed, send a notification to the PubSub which broadcasts to the liveview. I do not want to block my UI if the task takes too long. In addition, If the user initiates a new demand, I would want the previous one to be abandoned / ignored.

Most Liked

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

You can use put_private Phoenix.LiveView — Phoenix LiveView v1.2.5 for this since you don’t need change tracking. It also wouldn’t be particularly weird to put it in the assigns, as you might drive some UI behaviour to indicate that a background task is in progress.

Task.Supervisor — Elixir v1.20.2 has some examples of integrating async_nolink with handle_info.

Ultimately you need to store the task ref because it’s the most reliable way to detect crashes too.

tcoopman

tcoopman

An other option might be using async assigns like shown here:

spritefullake

spritefullake

These async assigns on the Phoenix documentation is great, wish it was made more prominent or easier to have found (I guess it is a relatively newer feature).

Also, at what point is the use of a GenServer / seperate module for managing workers warranted vs bare tasks within the liveview callbacks?

Where Next?

Popular in Questions Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
RisingFromAshes
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
dotdotdotPaul
Okay, I’m having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I’m sure I’...
New

Other popular topics Top

malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 53690 245
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
saif
Hello everyone, Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New

We're in Beta

About us Mission Statement