In Akka.Net there is the nice design inside an actor, to start a task with Task.Run
and pipe the result back to the actor:
Task.Run(() => Method(...)).PipeTo(self);
Note, there is no IO involved.
Inside
Model Method(...)
there is a little bit of pre-processing, then I have to wait on a call to a Task<Model>
and a little bit of post-processing.
Task<Model>
is in a third-party library, I cannot change it.
Currently I do
var model = proxy.GetModel(..).Result
inside a try catch
.
A possible AggregateException
is taken into account.
Another idea is to use this with await
.
var model = await proxy.GetModel(..)
inside a try catch
and changing the signature to
async Task<Model> Method(...)
How should I change the call to Method in the actor?
Task.Run(() => Method(...).Result).PipeTo(self);
Task.Run(async () => await Method(...)).PipeTo(self);
Which approach is better, what is the difference?