C#同时执行2个线程

2023-12-10

我正在尝试在 HTTP 处理程序中重现线程错误条件。

基本上,ASP.net 工作进程正在创建 2 个线程,它们在加载某个页面时同时调用我的应用程序中的 HTTP 处理程序。

http 处理程序内部是一个非线程安全的资源。因此,当两个线程尝试同时访问它时,就会发生异常。

我可能会在资源周围放置一个锁定语句,但是我想确保事实确实如此。所以我想首先在控制台应用程序中创建情况。

但我无法像 asp.net wp 那样让 2 个线程同时执行一个方法。所以,我的问题是如何创建两个可以同时执行一个方法的线程。

Edit:

底层资源是一个带有用户表(仅具有名称列)的 SQL 数据库。这是我尝试过的示例代码。

[TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void Linq2SqlThreadSafetyTest()
        {
            var threadOne = new Thread(new ParameterizedThreadStart(InsertData));
            var threadTwo = new Thread(new ParameterizedThreadStart(InsertData));

            threadOne.Start(1); // Was trying to sync them via this parameter.
            threadTwo.Start(0);

            threadOne.Join();
            threadTwo.Join();
        }


        private static void InsertData( object milliseconds )
        {
            // Linq 2 sql data context
            var database = new DataClassesDataContext();

            // Database entity
            var newUser = new User {Name = "Test"};

            database.Users.InsertOnSubmit(newUser);

            Thread.Sleep( (int) milliseconds);

            try
            {
                database.SubmitChanges(); // This statement throws exception in the HTTP Handler.
            }

            catch (Exception exception)
            {
                Debug.WriteLine(exception.Message);
            }
        }
    }

您可以像这样设置一个静态时间来开始工作。

private static DateTime startTime = DateTime.Now.AddSeconds(5); //arbitrary start time

static void Main(string[] args)
{
    ThreadStart threadStart1 = new ThreadStart(DoSomething);
    ThreadStart threadStart2 = new ThreadStart(DoSomething);
    Thread th1 = new Thread(threadStart1);
    Thread th2 = new Thread(threadStart2);

    th1.Start();             
    th2.Start();

    th1.Join();
    th2.Join();

    Console.ReadLine();
}

private static void DoSomething()
{
    while (DateTime.Now < startTime)
    {
        //do nothing
    }

    //both threads will execute code here concurrently
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#同时执行2个线程 的相关文章

随机推荐

  • 选择一系列嵌套元素的每隔一个元素(每个元素只有一个子元素)[重复]

    这个问题在这里已经有答案了 是否存在每秒定位一次的 css 选择器 letter 当然 我可以把所有 letter位于同一级别并使用的元素 nth child 2n 但它们都取决于前一个字母的位置 所以我需要嵌套 firstname pos
  • 填充前一列中的空白单元格 pandas python

    如果我有一个简单的数据框 例如 q 1 q 1 mark q 2 q 2 mark TRUE a 1 c FALSE b 2 TRUE c 3 如何填写 q 2 mark 列的空白值 以便它们与 q 1 mark 匹配 所以步骤是 查看该列
  • UWP 的“Add-DevAppPackage”Powershell 脚本检查开发人员许可证。这是侧面加载的问题吗?

    我正在开发一个 LOB 业务线 UWP 项目 我们希望将该应用程序作为 appxbundle文件 旁边是 cer和一个 Powershell 脚本 这是当您通过选择从 Visual Studio 生成捆绑包时在包中生成的内容Project
  • VS Code 终端打开,然后崩溃并在按终止按钮后消失

    在 VS Code 中单击 终止终端 后出现此错误 无法解析您的 shell 环境 生成的 shell 出现意外的退出代码 代码为 null 信号 SIGSEGV 现在 当我单击 终端 新终端 时 我的 VSCode 会执行此操作 它打开窗
  • CUDA 流销毁和 CudaDeviceReset

    我已经使用 CUDA 流实现了以下类 class CudaStreams private int nStreams cudaStream t streams cudaStream t active stream public default
  • 获取范围相对于其父容器的开始和结束偏移量

    假设我有这个 HTML 元素 div Hello everyone a This is my home page a p Bye p div 用户用鼠标选择 home 我希望能够确定有多少个字符 parent他的选择开始 以及从末尾开始有多
  • 重命名 JSON 中的属性

    你好 这是我的 json name test options Repartition Active Satellite No 我想用 s 重命名 卫星 中的 卫星 但我没有成功 我试过 UPDATE Liaison set content
  • 如何在将 html 写入 PDF 时应用样式

    我正在将 html 添加到 pdf 文件中 我的 html 是 div 形式 并且包含 style 属性 其样式如下border 2px solid red 但这种风格不适用于我正在写入 pdf 文件的 html 我正在使用以下代码 Doc
  • Cocoa 脚本:从“重复”命令返回克隆对象

    AppleScriptduplicate命令应该返回复制的对象 虽然使用基于 AE 的原始函数的应用程序似乎可以做到这一点 但基于 Cocoa 脚本框架的应用程序似乎永远不会返回任何内容 但缺失值 看来命令处理程序NSCloneComman
  • 是否有规范规定元素的 id 应该设为全局变量?

    如果我有一个 div 在 Chrome 中然后在 javascript 中我可以做a stuff 就好像a是一个全局变量 然而 这不适用于 FireFox 我需要使用document getElementById a 是什么正确的行为这里
  • 使用计时器更新列表 UI

    我正在尝试更新ListView with timer 我已经实现了 android UI 计时器 但我的问题是如何使用它ListView我需要在一定时间间隔后更新列表的每一行 处理程序如何更新列表的每一行 即假设TextView位于我将显示
  • 选择另一个受密码保护的数据库中的表?

    在 Microsoft Access 2003 和 Visual Basic 6 中 我尝试将表复制到另一个受密码保护的访问数据库 如下所示 Select INTO table2 IN database2 mdb Password Test
  • 在SSRS报告中显示条形码

    我正在尝试在 SSRS 报告中显示条形码 我在 Visual Studio 中的条形码报告中创建了一个字段 并将字体类型更改为 BC C39 3 到 1 Wide 格式 我用来显示的相应文本是 hellobarcode 每当我生成报告时 它
  • Clojure - 将字符串转换为整数向量的向量

    我试图解析一个文件并使用每一行来执行任意数量的函数和参数 我想调用的函数接受两个整数向量向量用于矩阵乘法 我能够将参数解析为一个向量 这样我就可以对其和解析的函数符号调用 apply 但我仍然需要将参数从字符串转换为适当的类型 我怎样才能实
  • “-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data”未调用

    看看这个代码片段 void connection NSURLConnection connection didReceiveResponse NSURLResponse response webData setLength 0 void c
  • 删除 websphere 中的 cookie - 如何注销

    我正在使用另一个网页 该网页通过 URL 将用户身份验证 AD 登录 传递到 WebSphere 当我注销时 我将重定向到登录页面 并且已经登录 因为我的会话从未关闭 我尝试了一些方法来禁用 WebSphere 的 cookie 但没有任何
  • IE中的rowspan和colspan问题

    因此 我需要创建具有复杂的 colspan 和 rowspan 系统的表 你可以看一下here 这是HTML table cellspacing 0 cellpadding 0 style width 100 tr td img src h
  • 如何在 MATLAB 中为该向量生成映射键?

    我有一个正在查看多个元素的函数 每个元素都是 8x1 列向量的形式 向量中的每个条目都是小于 1000 的整数 每次看到这样的向量时 我都会在检查该向量是否已在此列表中后将其添加到 已见过 向量列表中 该函数将检查约 100 000 个此类
  • 如何使用 Perl 找到目录及其所有子目录中最新的 .pl 文件?

    如何扫描整个目录的内容 包括其子目录的内容 并找到最新的 pl使用 Perl 在其中创建文件 我想构建所有完整文件路径的排序数组 列表 pl目录树中的文件 因此 例如 如果我的基本目录是 home users cheeseconqueso
  • C#同时执行2个线程

    我正在尝试在 HTTP 处理程序中重现线程错误条件 基本上 ASP net 工作进程正在创建 2 个线程 它们在加载某个页面时同时调用我的应用程序中的 HTTP 处理程序 http 处理程序内部是一个非线程安全的资源 因此 当两个线程尝试同