Вызовы Threading + Unit Test + SqlConnection не работают. Работает нормально без использования потоков - PullRequest
1 голос
/ 08 августа 2011

Основная идея заключается в том, что я хочу вызывать до 4 разных баз данных одновременно, а не по одной. Поэтому я использую многопоточность, и когда он пытается открыть соединение SQL, я получаю:

Невозможно оценить выражение, потому что код оптимизирован или Собственный кадр находится сверху стека вызовов

Есть идеи? (это запускается из модульного теста VS, если это имеет какое-либо отношение к нему)

using System;
using System.Data.SqlClient;
using System.Threading;
using Manual101.BLLDAL;

namespace Manual101.BLL
{
    public class AgencySender
    {
        private CourtCase localcc;
        private string connectionString = xxx; 
        public AgencySender(CourtCase cc)
        {
            this.localcc = cc;
        }

        public void SendOAG()
        {
            try
            {
                string queryString = "select JustisId from ReviewFilingCallbackMessage";

                using (SqlConnection connection =
                       new SqlConnection(connectionString))
                {
                    SqlCommand command = connection.CreateCommand();
                    command.CommandText = queryString;

                    connection.Open();

                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                var x = reader["JustisId"].ToString();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // log errors
            }
        }
    }

    public class AgencySenderHelper
    {
        private string connectionString = xxx    
        public void SendData(CourtCase cc)
        {
            //  AgencySender ags = new AgencySender(cc);
            //  ags.SendOAG();

            AgencySender ags = new AgencySender(cc);
            Thread thread = new Thread(new ThreadStart(ags.SendOAG));
            thread.Start();
        }
    }
}

1 Ответ

0 голосов
/ 11 декабря 2012

Убедитесь, что вы ожидаете завершения потоков в модульном тесте.Если вы порождаете кучу потоков и позволяете основному потоку завершиться, процесс MSTest прекратит принимать все ваши порожденные потоки.В этом случае вы часто будете сталкиваться со странными исключениями.

Самое простое, что можно сделать, это вызвать Thread.Join () для всех создаваемых вами потоков.

...