WebSocket实例存在未完成SendAsync调用报错,如何排查解决?
排查与解决WebSocket SendAsync冲突问题
报错原因分析
这个报错是因为代码中同步阻塞了异步任务,导致NetworkManager内部的WebSocket通信逻辑出现并发的SendAsync调用,违反了同一时间只能存在一个未完成SendAsync操作的规则。
代码问题定位
你用monitoring.Wait()同步等待监控任务启动,这会阻塞主线程,打乱NetworkManager内部的异步执行流程,进而引发WebSocket操作的冲突。
修复方案
把同步阻塞的Wait()替换成异步的await,让异步流程正常执行:
static async Task Main(string[] args) { const string Url = @"https://www.instagram.com/stories/afra.saracoglu1fan/3050333333186891216/"; var driver = new ChromeDriver(); NetworkManager manager = new NetworkManager(driver); manager.NetworkResponseReceived += ResponseHandler; // 用await替代Wait(),避免同步阻塞异步流程 await manager.StartMonitoring(); driver.Navigate().GoToUrl(Url); // 实际应用中可添加等待逻辑,比如等待页面加载完成或用户操作 // 示例:等待10秒后停止监控并清理资源 await Task.Delay(10000); await manager.StopMonitoring(); driver.Quit(); void ResponseHandler(object sender, NetworkResponseReceivedEventArgs e) { Console.WriteLine($"Http status: {e.ResponseStatusCode} | Url: {e.ResponseUrl} "); } }
额外注意事项
- 始终用
await等待异步任务,不要用Wait()或Result,避免阻塞线程导致异步上下文混乱。 - 程序结束前调用
StopMonitoring()和driver.Quit(),释放WebSocket和浏览器资源,防止残留未完成操作或资源泄漏。
内容的提问来源于stack exchange,提问作者Ali K
相关产品推荐
相关产品推荐

