Hi Stuart,

Here's the pattern:

```
public void handleRequest...
{
if (exchange.isInIoThread())
{
exchange.dispatch(this);
return;
}
//do some I/O intensive work
//...

CompletableFuture.supplyAsync(.../*send email with logged exception handling*/...) //#A
exchange.getResponseSender().send(responseJson);
}
```

The line #A is inconsistent. The task in #A is executed by a thread in common forkjoin pool and may be that could be the reason? I'm not sure.

Maybe using one of undertow's worker threads might solve it? Is there a way to do so? All I want is to return response to the client immediately and execute delayable work in the background thread.

Thanks.


On Mon, Mar 26, 2018 at 4:50 AM, Stuart Douglas <sdouglas@redhat.com> wrote:
How are you running the task? If you just submit it to the worker it should just run like any normal executor.

Stuart

On Mon, Mar 26, 2018 at 3:31 AM, Nabeel Imtiaz <nimtiazm@gmail.com> wrote:
Hi,

I'm trying to perform expensive tasks (like sending email/sms etc) as an async task (using CompletableFuture API) after my undertow worker completes and i'm about to respond to the client. These tasks are supposed to work like fire and forget and I don't want to wait until the task completes and then respond to the client.

I've noticed that sometimes the task doesn't execute and sometimes it does. It's inconsistent and hard to reproduce. Is there a way to be able to perform these async tasks consistently? May be i'm using wrong thread-pool? Or may be there's already a way in Undertow to do such tasks.

Please comment.

Thanks.

_______________________________________________
undertow-dev mailing list
undertow-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/undertow-dev