jamesmh / coravel

Near-zero config .NET library that makes advanced application features like Task Scheduling, Caching, Queuing, Event Broadcasting, and more a breeze!

Home Page:https://docs.coravel.net/Installation/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Is it possible to run the tasks one after the other?

alandecastros opened this issue · comments

In this code you're runnning WhenAll making the tasks run in parallel, right?

await Task.WhenAll(

I'm running into some issues with database max pool size limit (lots of tasks running at the same time) and wanted to know what you think about creating an option to run tasks one by one? Or am I missing something?

Regards

Yes, that's an issue that can come up. This used to be the way Coravel worked, but changed it for throughput reasons. I not sure adding this as an option should be a concern of Coravel proper....

There are other ways around this specific issue.

1

You create a static (or DI injected) class that handles creating all your DB connections. This will pool or just limit how many connections can be used at a given time.

Different interfaces could exist for something like this:

var sqlConnection = await connectionPool.GetOpenConnectionAsync();

Or

await connectionPool.WithSqlConnection(async sqlConnection => {
    await sqlConnetion.ExecuteAsync(SQLString_const);
});

Under the covers, you would probably use a semaphore to limit how many actions can occur concurrently.

2

Another consideration: it might be that your code could be issuing too many SQL connections and that could be optimized.

3

Or, if your code gets a specific exception, you could handle that specific exception and retry in X milliseconds (with backoff, etc.) Many use something like Poly for that.

4

Or, it could be a legit issue where there's some bad code that's not releasing DB connections efficiently. Here's a SO example: https://stackoverflow.com/questions/49748789/max-connection-pool-reached

Thanks @jamesmh ! I'll see my options here!

Regards