多线程应用程序中的委托

本文关键字:应用程序 多线程 | 更新日期: 2023-09-27 18:30:12

我是委托的新手,我想看看下面的代码是否会引起任何问题。我写的代码没有使用共享变量,而是使用了如下所示的共享委托

       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
    }

我假设代码应该可以正常工作,因为每次都会创建一个新的委托实例。我说得对吗?如果委托的一个已创建实例出现问题,会影响其他实例吗?

提前感谢您的回答,

多线程应用程序中的委托

首先,您没有修改(添加或删除)要委托的处理程序。那么,为什么要一直创造新事物呢?

尝试以下

private static readonly delSaveData _delSaveData = new delSaveData(SaveData);

这应该没问题。您可以在任意数量的线程中使用它。

如果出了什么问题呢?

出了什么问题?不知道你在这里是什么意思。

我假设代码应该可以正常工作,因为每次都会创建一个新的委托实例。我说得对吗?

你试过运行代码吗?你试过什么?我认为它没有直接的问题。

我可以告诉你:如果从任何一个线程抛出异常(实例化委托或执行委托时可能出现的问题),它将无法处理。一个线程中的异常不会影响另一个线程。所以不,如果"出了问题",它不会影响其他实例。