1

我正在尝试使用Alchemy Websockets组合一个快速的小程序,该程序在其示例中使用 ConcurrentDictionary 集合。

在我编写的代码中,我试图将一个新客户端添加到 ConcurrentDictionary。我注意到我的脚本在尝试访问此客户端时在其他区域失败,并将其缩小到我添加到 ConcurrentDictionary 的项目立即进入“僵尸”状态。

这是我添加客户端的测试代码:

Client test = new Client(ctx, sessId);
Clients.TryAdd(test, String.Empty);
Console.WriteLine ("Adding new client: " + sessId);

如果我使用调试器在该区域中断,我可以看到“测试”包含正确的客户端信息,但在将其添加到客户端集合后立即显示“对象处于僵尸状态。(来自 HRESULT 的异常:0x8013134F)” .

字典在我的类中声明如下:

protected ConcurrentDictionary<Client, string> Clients = new ConcurrentDictionary<Client, string>();

我知道我可能正在做一些愚蠢的事情,但是什么给了?

4

1 回答 1

2

如果您的结论是进入 ConcurrentDictionary 的项目进入僵尸状态,那么您假设任何对象都会这样做,对吗?然后,尝试通过编写一个更小的程序来测试这个假设,简化的测试用例,它不耦合到客户端类,或者根本不耦合到 WebSockets 库。

如果这仍然给您带来问题,恭喜,您现在正在缩小问题范围。我要做的第二步是使用您的较小程序并尝试在 MS.NET(而不是 Mono)中执行它。如果它适用于 MS.NET 而不是 Mono,那么我将在 Mono 的错误跟踪器中提交一个错误:http: //bugzilla.xamarin.com/

但是,如果您的程序也不能在 MS.NET 中运行,那么您可能做错了什么!

于 2012-07-30T20:47:29.437 回答