确保 C# 中静态方法的线程安全

2024-01-27

我目前在静态类/方法中有一些代码,但我想检查它是否是线程安全的。从我读到的内容来看,我认为这应该没问题,但我内心深处的某些想法告诉我,这可能不是。我的网页的数据处理阶段使用外部 Web 服务来创建订单记录,这可能会非常慢:可能需要 30-40 秒,也可能需要 5 或 10 分钟(这不由我掌控),所以我要解雇将页面返回给用户,然后启动一个新线程,然后在处理完成后向用户发送电子邮件。当前处于静态类/方法中。假设我的所有对象都是在特定方法中创建的(除了系统默认值,这很常见),该方法应该是线程安全的,不是吗?所以,举例来说,如果我有

public static class ProcessOrder()
{
    public static int GetOrderMaxSize()
    {
        return (....gets and parses ConfigurationManager.AppSettings["MaxOrderSize"]...);
    }

    public static bool CreateOrder(Order order)
    {
        XmlDocument xmlDoc = GetOrderXML(order);
        bool check = false;
        using (CreateOrderXML.Create xmlCo = new CreateOrderXML.Create())
        {
            xmlCo.Timeout = 60000;
            System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

            string xmlString = "";
            using (StringWriter stringWriter = new StringWriter())
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter))
                {
                    xmlDoc.WriteTo(xmlWriter);
                    xmlWriter.Flush();
                    xmlString = stringWriter.GetStringBuilder().ToString();
                }
            }

            byte[] bXMLOrder = encoding.GetBytes(xmlString);
            byte[] breturnMessage;

            check = xmlCo.Create(bXMLOrder, out breturnMessage);
            .... do something with return message
        }
        return check;
    }

    private static XmlDocument GetOrderXML(Order order)
    {
        ... creates an XML object for the order
    }
}

(CreateOrderXML 是对 Web 服务 URL/方法的服务引用)这是否是线程安全的,特别是对于长时间运行(主要在 xmlCo.Create(....) 阶段)并发线程?我知道,如果我开始放入类成员,然后在方法中使用它们,这肯定会引入不同线程覆盖值的问题,但只要对象是在方法中创建的,它们应该没问题,应该'他们吗?


您似乎没有访问那里的任何共享数据;您正在请求远程资源,并在每次执行此方法时构建一组唯一的数据。那里不需要同步。

这里方法的每次执行都会创建局部变量——它自己的副本。所以没有任何东西被共享。

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

确保 C# 中静态方法的线程安全 的相关文章

  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • string.Compare 行为

    怎么会这样呢 这是从VS2008中的立即窗口获取的 string Compare 1 string Compare 0 0 1 从言论来看字符串比较 http msdn microsoft com en us library 84787k2
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 如何打开 Windows 资源管理器窗口并选择特定文件夹

    我有一个 winform 应用程序 这个 winform 应用程序创建了几个文件 我想在我的应用程序中实现 查找目标 功能来显示这些文件 这些文件位于同一文件夹中 看图片 假设我创建了几个文件 C Test 文件夹 该文件夹包含以下文件 C
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • 在 Windows 中传输大文件的最佳方法

    在备份我们的网络电子邮件服务器期间 我经常需要在内部和外部驱动器之间传输 gt 50GB 有时 gt 100GB 的大文件 传输这些文件的最佳方法是什么 命令行 例如 XCOPY 如果由于时间限制或网络问题而中断 可能有足够强大的功能可以继
  • Jersey - 为资源方法注册 ExceptionMapper

    问题特定类的异常处理 映射 https stackoverflow com questions 36370991让我想到了如何注册的问题ExceptionMapper到特定资源Method 我尝试过使用DynamicFeature像这样 动
  • 对 node.js、connect-mongo 的并行请求、会话被覆盖

    在当前的项目 一种商店系统 中 我使用node js快递JS and 连接 mongo作为会话存储 在客户端 我在启动时使用单个请求来创建一个新会话 然后向 Node js 服务器发送多个并行请求 当然 因为这些并行请求会更改会话 所以这些
  • Golang:JSON:如何将字符串数组解组为 []int64

    Golang encoding json包让你使用 string结构标记以便编组 解组字符串值 例如 309230 into int64场地 例子 Int64String int64 json string 但是 这不适用于切片 即 int
  • 与 join 一起计数

    我想找出哪个播放列表包含超过 2 首歌曲 该语句有效 但我想要播放列表的名称和显示的歌曲的 count 我想我必须使用连接 但我不明白它应该如何工作 有人可以帮忙吗 playlist table id name playlist songs
  • 从具有 NaN 的多维数组中找出最小值

    我有一个二维数组 double 我想知道最小值是多少 我尝试了 Linq Select Min 但由于我的数组通常包含NaN值 那么minvalue总是NaN 因此 我需要某种方法来找到 跳过 NaN 的最小值 任何帮助深表感谢 今天是扩展
  • 反向应用提交到工作副本

    为了研究先前提交引入的效果 我想将其反向应用到我的工作副本并修改代码 我管理了围绕创建和应用补丁的工作流程 但想知道这是否可以更容易地完成 git checkout b tmp fiddle git diff R p d9fd2bb d9f
  • JSF Converter 错误消息中的自定义变量

    我有一个表单页面 其中有一个接受日期的 inputText 字段 我们有一个转换器 可以将文本框中的字符串转换为 Date 对象 即 2011 03 01 到 java util Date 2011 03 01 如果字符串不是日期 例如 1
  • 带 URL 操作的 JSF 表单?

    有没有什么方法可以调用 URL 操作
  • 使用 java UrlConnection 通过 ntlm(或 kerberos)进行身份验证

    我需要使用 java 使用 REST Web 服务 传递域用户帐户的凭据 现在我正在用经典的asp来做 set xmlHttp server createObject msxml2 serverxmlhttp xmlHttp open me
  • 如何在 django 中禁用南调试日志记录?

    当我在 Django 中运行测试时 失败后我从 South 获得了几页调试输出 如下所示 south DEBUG south execute CREATE INDEX sometable 4d5bad5 ON video playable
  • Rails 删除链接 JavaScript ajax 调用

    我想创建一个ajax删除调用 单击链接时 应出现确认框 然后 p 标签淡出 注释 问题在于ajax调用应该如何以及如何显示确认框 HTML 视图 a class softdelete href blogs 5 comments 18 sle
  • 如何在 Core 2.0 的 ConfigurationBuilder 中设置BasePath

    如何在 Core 2 0 的 ConfigurationBuilder 中设置基本路径 我用谷歌搜索并发现this https stackoverflow com questions 33169589 specify the applica
  • 使用密钥保管库的更安全方式

    通常 当您使用密钥保管库加密和解密数据时 您必须以纯文本形式将 AD 注册应用程序 有权访问密钥保管库 的 ClientID 和 ClientSecret 保存在某处 如果有人窃取了 ClientID 和 Secret 那么任何人都可以声称
  • 如何设置机器人的状态

    所以我试图让我的机器人流媒体与抑郁症 但我已经尝试了多种方法 但它们不起作用 我尝试过这些方法 client user setPresence game name with depression status online bot user
  • 我可以在 BigQuery 中检索外部表数据的文件名吗?

    希望为部门团队实现一个简单的数据存储 他们目前在其中管理大量 excel csv 文件 我们将让他们准备文件并将它们以 CSV 格式放入 GCS 存储桶中 然后将外部 BQ 表指向此 一切都很好 但是 如果他们运行查询并看到一些数据 然后想
  • 在 Objective C、.net 和 Android 中生成相同的加密字符串 AES/CBC/PKCS7Padding

    我想在iOS中生成相同的加密字符串 在 net中生成android 我可以在 android 和 net 中生成相同的字符串 但对于 Objective C 则不同 安卓代码 public static String encrypt Str
  • VS 安装项目:安装时卸载其他组件

    我正在创建一个 Visual Studio 安装项目 我想从安装我的组件时从系统中卸载另一个组件 另一个组件是从我自己使用 Visual Studio 创建的设置安装的 目前 当我从组件的安装操作中调用另一个组件的卸载时 我收到错误代码 1
  • 为什么带有 pop 方法(或 del 语句)的 for 循环不迭代所有列表元素[重复]

    这个问题在这里已经有答案了 我是 Python 新手 正在尝试使用列表 我在 linux2 上使用 Python 3 2 3 默认 2012 年 10 月 19 日 20 13 42 GCC 4 6 3 这是我的示例代码 gt gt gt
  • 确保 C# 中静态方法的线程安全

    我目前在静态类 方法中有一些代码 但我想检查它是否是线程安全的 从我读到的内容来看 我认为这应该没问题 但我内心深处的某些想法告诉我 这可能不是 我的网页的数据处理阶段使用外部 Web 服务来创建订单记录 这可能会非常慢 可能需要 30 4