gpt4 book ai didi

.net - 可能的线程,变量复制问题

转载 作者:行者123 更新时间:2023-12-03 13:16:28 29 4
gpt4 key购买 nike

我们有一个运行以下程序的应用程序:

protected string _largeFile;

Execute() //this executes in basically an infinite loop.
{
_largeFile = "";
DoStuff();
DoStuff();
_largeFile = "ReallyBigString"; //sometimes 4-5Mb
if(_largeFile != "")
{
RaiseEvent();
}
DoStuff();
DoSTuff();
Thread.Sleep(5000); //wait 5 seconds;
//repeat
}

CatchEvent()
{
SendLargeFileToWebService(_largeFile);
}

此代码在我们无法控制的客户端PC上执行。该代码基本上得到一个大文件,并将其发送回我们的服务器。问题是有时返回到Web服务的largeFile为空。我们对此进行了一段时间的研究,但无法确定如何发生。

唯一具有优点的解决方案是RaiseTheEvent花费的时间太长,以至于Execute方法在随后的执行时间中,在SendLargeFileToWebService能够执行此操作之前,将清除类级别_largeFile变量。

我的问题:这是否合理?编写代码的开发人员辩称,使用类级别变量的原因是避免必须复制实例变量并将其传递给新线程(可能是事件在其上执行)。这看起来像是正确的方法吗?对此可能没有 Elixir 的答案,因此,如果有人可以在引发事件时向我解释一些实例事件的辩论标准与类变量的标准,我将不胜感激。我也很好奇所提议的问题是否合理。在评估来自不同线程的大字符串时,他们是否是已知问题?

最佳答案

我对这种情况有点不清楚。但是从您的描述看来,Execute方法是从多个线程调用的。如果是这样,那么是的,您肯定有一个错误,因为如果在任何时候运行两个Execute方法,您将在_largeFile上产生竞争条件。

有2种方法可以解决此问题

  • _largeFile的内容作为参数传递给Execute
  • 在execute方法内添加一个锁,以防止多个线程同时执行该锁。

  • 他们不想在懒惰和恕我直言的周围传递变量的论点不应被视为有效论点。

    关于.net - 可能的线程,变量复制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078251/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com