in src/ShellRouting/OrderedShellHandler.cs [26:57]
public virtual Task<TResult> HandleAsync(Message message, TResult? previousResult, Action onHandled) =>
HandleAsync(message, previousResult);
public Task HandleAsync(Message message)
{
Logger?.LogDebug("Handing {MessageType} with ordered shell handler.", message.Header.MessageType);
currentTask = new Task<TResult?>((state) =>
{
taskDepth++;
var previousTask = (Task<TResult?>?)state;
var previousResult = previousTask?.Result;
var handled = false;
Action onHandled = () =>
{
handled = true;
taskDepth--;
if (taskDepth == 0)
{
currentTask = null;
}
};
var currentResult = HandleAsync(message, previousResult, onHandled).Result;
if (!handled)
{
onHandled();
}
return currentResult;
}, currentTask);
currentTask.Start();
return currentTask;
}