This commit is contained in:
parent
10dc6e3bdc
commit
5606899d48
|
|
@ -455,10 +455,7 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
// RemoveEventHandlerIdsAsync is designed to be fired-and-forgotten
|
RemoveEventHandlerIds(_batchBuilder.DisposedEventHandlerIds.ToRange(), updateDisplayTask);
|
||||||
// It will clone and persist any state it needs if it needs to run asynchronously
|
|
||||||
_ = RemoveEventHandlerIdsAsync(_batchBuilder.DisposedEventHandlerIds.ToRange(), updateDisplayTask);
|
|
||||||
|
|
||||||
_batchBuilder.ClearStateForCurrentBatch();
|
_batchBuilder.ClearStateForCurrentBatch();
|
||||||
_isBatchInProgress = false;
|
_isBatchInProgress = false;
|
||||||
}
|
}
|
||||||
|
|
@ -602,7 +599,7 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RemoveEventHandlerIdsAsync(ArrayRange<int> eventHandlerIds, Task afterTaskIgnoreErrors)
|
private void RemoveEventHandlerIds(ArrayRange<int> eventHandlerIds, Task afterTaskIgnoreErrors)
|
||||||
{
|
{
|
||||||
if (eventHandlerIds.Count == 0)
|
if (eventHandlerIds.Count == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -619,6 +616,13 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
_ = ContinueAfterTask(eventHandlerIds, afterTaskIgnoreErrors);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Factor out the async part into a separate local method purely so, in the
|
||||||
|
// synchronous case, there's no state machine or task construction
|
||||||
|
async Task ContinueAfterTask(ArrayRange<int> eventHandlerIds, Task afterTaskIgnoreErrors)
|
||||||
{
|
{
|
||||||
// We need to delay the actual removal (e.g., until we've confirmed the client
|
// We need to delay the actual removal (e.g., until we've confirmed the client
|
||||||
// has processed the batch and hence can be sure not to reuse the handler IDs
|
// has processed the batch and hence can be sure not to reuse the handler IDs
|
||||||
|
|
@ -636,8 +640,8 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
||||||
// That remains the caller's business.
|
// That remains the caller's business.
|
||||||
}
|
}
|
||||||
|
|
||||||
// We know the next execution will complete synchronously, so nothing to await
|
// We know the next execution will complete synchronously, so no infinite loop
|
||||||
_ = RemoveEventHandlerIdsAsync(eventHandlerIdsClone, Task.CompletedTask);
|
RemoveEventHandlerIds(eventHandlerIdsClone, Task.CompletedTask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue