我正在尝试使用在其示例中使用ConcurrentDictionary集合的Alchemy Websockets快速编写一个小程序。
在我编写的代码中,我正在尝试向ConcurrentDictionary添加一个新客户端。我注意到我的脚本在尝试访问此客户端时在其他区域失败并将其缩小到我正在添加到ConcurrentDictionary的项目,立即进入“僵尸”状态。
这是我添加客户端的测试代码:
Client test = new Client(ctx, sessId);
Clients.TryAdd(test, String.Empty);
Console.WriteLine ("Adding new client: " + sessId);
如果我使用我的调试器在这个区域中断,我可以看到“test”包含正确的客户端信息,但在将其添加到Clients集合后立即显示“对象处于僵尸状态。(HRESULT的异常: 0x8013134F)”。
字典在我的班级中声明:
protected ConcurrentDictionary<Client, string> Clients = new ConcurrentDictionary<Client, string>();
我知道我可能做的事情很愚蠢,但是给出了什么?
答案 0 :(得分:2)
如果您的结论是进入ConcurrentDictionary的项目进入僵尸状态,那么您假设任何对象都有,对吧?然后,尝试通过编写一个较小的程序,缩小的测试用例,未耦合到Client类,或者根本不是WebSockets库来测试该假设。
如果这仍然给你带来问题,恭喜你,你现在正在缩小问题范围。我要做的第二步是拿你的小程序并尝试在MS.NET(而不是Mono)中执行它。如果它在MS.NET中工作而不在Mono中,那么我会在Mono的bug跟踪器中提交一个错误:http://bugzilla.xamarin.com/。
但是,如果你的程序在MS.NET中也不起作用,那么你可能做错了什么!