Lazy create ResourceInvoker.InvokeResultFilters statemachine
This commit is contained in:
parent
0657a3ed1a
commit
7393f264b0
|
|
@ -1049,16 +1049,41 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task InvokeResultFilters()
|
private Task InvokeResultFilters()
|
||||||
{
|
{
|
||||||
var next = State.ResultBegin;
|
try
|
||||||
var scope = Scope.Invoker;
|
|
||||||
var state = (object)null;
|
|
||||||
var isCompleted = false;
|
|
||||||
|
|
||||||
while (!isCompleted)
|
|
||||||
{
|
{
|
||||||
await ResultNext<IResultFilter, IAsyncResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
var next = State.ResultBegin;
|
||||||
|
var scope = Scope.Invoker;
|
||||||
|
var state = (object)null;
|
||||||
|
var isCompleted = false;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
var lastTask = ResultNext<IResultFilter, IAsyncResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
if (!lastTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, lastTask, next, scope, state, isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Wrap non task-wrapped exceptions in a Task,
|
||||||
|
// as this isn't done automatically since the method is not async.
|
||||||
|
return Task.FromException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
|
||||||
|
{
|
||||||
|
await lastTask;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
await invoker.ResultNext<IResultFilter, IAsyncResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue