Explicación de la conexión Solrnet
Pregunta
¿Por qué el contenedor de las conexiones Solrnet se mantiene estática? Esta es una falla muy grande, ya que cuando, en nuestra aplicación, enviamos una solicitud asíncrona a nuestra aplicación, Solrnet se comporta de manera anormal. ¿Cómo puedo evitar este problema en Solrnet?
class P
{
static void M(string[] a)
{
Thread t = new Thread(delegate()
{
f1();
});
Thread t1 = new Thread(delegate()
{
f2();
});
t.Start();
t1.Start();
t.Join();
t1.Join();
}
static void f1()
{
Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr3/"));
ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
}
static void f2()
{
Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr1/"));
ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
}
}
Solución
Como explicado en la wiki, el contenedor incorporado (inicio) está actualmente limitado para acceder a múltiples núcleos/instancias con diferentes tipos mapeados. Si desea más flexibilidad al respecto, cambie a Windsor / StructureMap / Autofac, o Ayuda a implementar esta función.
Es posible que los registros en el contenedor incorporado no sean seguros de subprocesos como ha descubierto, pero no gana nada al registrar / inicializar Solrnet en diferentes subprocesos. Simplemente mueva toda la inicialización a un solo hilo, el trabajo pesado real se realiza cuando haces Solr.Query (...) o Solr.Add (...) que es a salvo de amenazas.