Вопрос

Почему контейнер соединений Solrnet остается статичным? Это очень большая ошибка, как и в нашем приложении, мы отправляем асинхронную запрос в нашу приложение, Solrnet ведет себя ненормально. Как я могу избежать этой проблемы в 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>>();
    }
}
Это было полезно?

Решение

  1. В качестве объяснил в вики, Встроенный контейнер (запуск) в настоящее время ограничен доступа к нескольким ядрам/экземплярам с различными типами. Если вы хотите больше гибкости, переключитесь на Windsor / StructureMap / Autofac, либо Помогите реализовать эту функцию.

  2. Регистрации в встроенном контейнере могут быть не безопасны, как вы обнаружили, но вы ничего не получаете, зарегистрировав / инициализацию Solrnet в разных потоках. Просто переместите всю инициализацию в одну потоку, фактическая тяжелая работа выполняется, когда вы выполняете Solr.Query (...) или Solr.Add (...), который является потокобезопасность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top