线程+单元测试+ SqlConnection调用不工作.它工作得很好,不使用线程

本文关键字:线程 工作 很好 调用 单元测试 SqlConnection | 更新日期: 2023-09-27 18:04:45

主要思想是我想同时调用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();
        }
    }
}

线程+单元测试+ SqlConnection调用不工作.它工作得很好,不使用线程

确保在单元测试中等待线程终止。如果您派生出一堆线程并让主线程终止,那么MSTest进程将结束并带走所有派生的线程。在这种情况下,你经常会遇到奇怪的异常。

最简单的方法就是在你创建的所有线程上调用Thread.Join()。