我有一个问题,NavigationManager.NavigateTo 在某些情况下无法导航。
要重现此问题,您可以创建一个新的 Blazor Web 应用程序并添加新页面:
@page "/test"
@attribute [StreamRendering]
@inject NavigationManager NavigationManager
<h3>Component</h3>
@code {
protected override async Task OnInitializedAsync()
{
await Test();
}
private async Task Test()
{
await Task.Delay(1000);
NavigationManager.NavigateTo("/");
}
}
在这种情况下,NavigateTo 可以工作。 但是当我将
OnInitializedAsync
更改为:
protected override async Task OnInitializedAsync()
{
var task = Test();
await Task.WhenAny(task);
}
然后就不行了。有人知道并可以解释为什么会这样吗?
谢谢!
编辑:我用 .NET 8 RC2 测试了它。
目前没有实际的解决方案,但由于 Task.WhenAny 的工作方式而有一个解决方法,并且 Microsoft 不会很快修复或更改此问题。
因此,当前的解决方法是不在 OnInitializedAsync
中使用
Task.WhenAny
或等待两次:
await await Task.WhenAny(task);
即Task.WhenAny返回一个Task。因此,预计会有双重等待。
~引用自链接问题
Tobias 在上面的评论中链接的 github 问题中提供了解决方案。我只是想在这里提供答案,这样人们就不必搜索评论链接并滚动对话。