Closed
Description
Describe the bug
Tasks returned from JSRuntime.InvokeAsync during second call to OnInitAsync (after prerendering) never finishes.
To Reproduce
Create a new razorcomponents project.
Add a js interop function to Index.cshtml and disable prerendering
<script>
window.interopDuringOnInit = function() {
return "Hello World";
}
</script>
<app></app>
<script src="_framework/components.server.js"></script>
Call js interop during OnAsyncInit in Index.razor
<h1>@Greeting!</h1>
Welcome to your new app.
@functions {
string Greeting;
protected override async Task OnInitAsync()
{
try
{
Console.WriteLine("Calling browser");
Greeting = await JSRuntime.InvokeAsync<string>("interopDuringOnInit");
Console.WriteLine("Returned from browser");
}
catch (Exception ex)
{
Console.WriteLine("Could not invoke interop during OnInit, " + ex.ToString());
}
}
}
When OnInitAsync is called as part of an initial load (prerendering disabled) the task never finishes, This leaves the circuit hanging, and no further events are processed.
If this component is loaded from a IUriHelper.OnLocationChange
, the above code works as expected.