我是代理人的新手,我想看看以下代码是否会导致任何问题。我编写的代码不是使用共享变量,而是使用共享委托,如下所示
public delegate void delSaveData(string data1, string data2);
private static delSaveData _delSaveData;
static void Main(string[] args)
{
Thread td1 = new Thread(td1func);
Thread td2 = new Thread(td2func);
td1.Start();
td2.Start();
}
private static void td1func()
{
while(true)
{
// do some operation
_delSaveData= new delSaveData(SaveData);
_delSaveData("someValueFromtd1", "someValueFromtd1");
}
}
private static void td2func()
{
while(true)
{
// do some operation
_delSaveData= new delSaveData(SaveData);
_delSaveData("someValueFromtd2", "someValueFromtd2");
}
}
private static void SaveData(string test1, string test2)
{
//Save Data in database
}
我假设代码应该正常工作,因为每次都会创建一个新的委托实例。我对吗? 如果在一个创建的委托实例中出现问题,它会影响其他实例吗?
提前感谢您的回答,
答案 0 :(得分:1)
首先,您不需要修改(添加或删除)处理程序以进行委托。那么为什么要一直创造新的呢?
尝试以下
private static readonly delSaveData _delSaveData = new delSaveData(SaveData);
这应该没问题。你可以在任意数量的线程中使用它。
如果出现问题怎么办?
出了什么问题?不确定你的意思。
答案 1 :(得分:0)
我假设代码应该正常工作,因为每次都会创建一个新的委托实例。我是对的吗?
您是否尝试过运行代码a.k.a您尝试了什么? 我没有看到它的直接问题。
我可以告诉你:如果一个异常(在实例化代理或执行它时可能发生的问题)从任一个线程抛出它将被取消处理。 一个线程中的异常不会影响另一个线程。所以不,如果“出现问题”,它不会影响另一个实例。