我正在使用带有多线程处理的Cassandra的c#驱动程序。 首先,我尝试创建连接并执行命令,然后在完成工作后关闭连接。但它似乎对我不起作用,有时它会有一个例外,即无主机可用。
所以,我改为使用静态连接。它似乎也有效。 但是当线程工作得太快时,它又被打破了。我要把一些Thread.Sleep放1秒然后才能工作。
使用这个静态解决方案,我尝试使用异步进程,BeginExecute,它也不适用于我,例外无主机可用。
因此,任何人在使用Cassandra c#驱动程序的多线程处理方面都有更好的想法或更好的实现,如果你能分享,我们将不胜感激。
提前谢谢。
干杯, 健
答案 0 :(得分:1)
CassandraSession一次只能有一个连接。现在考虑它可能不是线程安全的。但是连接池是线程安全的,所以如果你使用它,你将始终拥有高可用性连接
答案 1 :(得分:1)
如果使用异步方法,它看起来像是:
Statement sta=new SimpleStatement("Select * from XXX where XXX;");
session.ExecutAsync(sta);
答案 2 :(得分:0)
确保您的设置满足connection requirements
C#驱动程序绝对应该在多线程环境中工作(1个集群对象,1个会话对象/密钥空间)
很难说为什么在没有看到任何代码的情况下看到NoHostAvailable异常。