2011-08-08 2 views
1

주요 아이디어는 한 번에 하나씩이 아니라 4 개의 다른 데이터베이스를 동시에 호출하고 싶습니다. 그래서 스레딩을 사용하고 있으며이 SQL 연결을 열려고 할 때 얻을 :스레딩 + 단위 테스트 + SqlConnection 호출이 작동하지 않습니다. 스레딩을 사용하지 않고 잘 작동합니다.

식을 계산할 수 없습니다 코드를 최적화하거나 기본 프레임이 호출 스택의 상단에 있기 때문에

어떤 아이디어? (이것은 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(); 
     } 
    } 
} 
+0

전체 스택 추적을 게시하십시오. 또한, 거기에 내부 예외가 첨부되어 있습니까? –

+0

스택에 아무것도 ... 그리고 나는 시도 캐치를 제거하면 다음 오류가 제공하지 않습니다는 .. 그냥)합니다 (connection.Open 후 실행을 중지하는 것 같다; – punkouter

+0

쿼리 코드가 중단 된 것처럼 보일뿐 실행되는 것을 볼 수 있습니다 당신은 SQL-프로파일 러를 연결하면? 아, 그리고 전체 테스트를 게시하시기 바랍니다. 당신은 디버그 빌드 대신 릴리스 빌드를 컴파일하고 확인 – alun

답변

0

유닛 테스트에서 스레드가 종료 될 때까지 기다리고 있는지 확인하십시오. 많은 스레드를 생성하고 주 스레드가 종료되도록하면 MSTest 프로세스가 스폰 된 스레드를 모두 사용하여 종료합니다. 이 경우 이상한 예외가 생길 수 있습니다.

사용자가 만든 모든 스레드에서 지정된 Thread.join()를 호출하는 것입니다 가장 쉬운 것.