我创建了一个基本的Blazor服务器端聊天,但是从未调用过OnDisconnectedAsync,即使关闭了浏览器,连接仍保持活动状态。
OnDisconnectAsync方法位于ChatHub.cs内部:
public override async Task OnDisconnectedAsync(Exception exception)
{
Debug.WriteLine("Disconnected");
}
如果改用Blazor WebAssembly,则相同的代码也可以工作。 我不知道这是错误还是缺少的东西。
答案 0 :(得分:0)
我弄清楚了为什么未调用OnDisconnectAsync的原因,该解决方案由Steve Sanderson针对我在GitHub上打开的问题提供:
https://github.com/dotnet/aspnetcore/issues/20932#event-3245802796
Blazor服务器处理该连接,但不处理必须手动处理的HubConnection。由于Blazor不支持IAsyncDisposable,因此不会等待对DisposeAsync的调用,并且也不得等待DisposeAsync:
@implements IDisposable
... rest of component code ...
@code {
public void Dispose()
{
_hubConnection.DisposeAsync();
}
}
这不仅适用于Blazor Server。如果Blazor WebAssembly上的集线器连接位于单个组件中,则也必须对其进行处理。