Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 返回Null的对象:线程执行_.net_Multithreading - Fatal编程技术网

.net 返回Null的对象:线程执行

.net 返回Null的对象:线程执行,.net,multithreading,.net,Multithreading,我试图在线程范围内分配EmployeeModel对象并运行它之后返回它。return_Employee对象即使在运行之后也会返回Null值。AddEmployee是返回类型EmployeeModel对象的另一种方法 我实际上需要线程方法具有返回类型,以便在单元测试项目中使用它 public EmployeeModel AddEmployeeUsingThread(int emp_ID, decimal basicPay, decimal deductions, de

我试图在线程范围内分配EmployeeModel对象并运行它之后返回它。return_Employee对象即使在运行之后也会返回Null值。AddEmployee是返回类型EmployeeModel对象的另一种方法

我实际上需要线程方法具有返回类型,以便在单元测试项目中使用它

       public EmployeeModel AddEmployeeUsingThread(int emp_ID, decimal basicPay, decimal deductions, 
       decimal taxablePay, decimal NetPay)
       {

        EmployeeModel return_Employee=null;

        var thread = new Thread(()=>
        {
            return_Employee= AddEmployee(emp_ID, basicPay, deductions, taxablePay, NetPay);
        });
        thread.Start();

        return return_Employee;
    }

您并不是在等待线程完成,几乎可以肯定的是,在您从该线程返回值时,该变量仍然为null。由于您必须等待线程完成,您应该完全删除线程并直接调用AddEmployee,否则您将不得不将其转换为使用
任务
,该任务将在将来某个时候完成后返回员工。请参阅此帖子,这是我在不使用async或task的情况下获取result/return对象的方法。问题是。。。其他方法在线程中运行良好,只是在AddEmployee的情况下没有。你能用Task generic重构这个代码吗?@InterStellaR
thread.Join()线程.Start()之后缺少代码>方法调用
Yes,要完成代码并仍然使用线程,可以添加
thread.Join(),但我不认为在这里使用线程有什么意义。如果可以在线程执行时执行其他操作,那么线程非常有用。在这种情况下,没有必要暂停一个线程,等待刚刚开始的另一个线程完成。我会直接调用这个方法,而不涉及线程,因为你从中完全得不到任何好处。不,实际上,我是在比较使用线程和非线程(默认方法)的执行时间,作为我训练练习的一部分。在验证返回对象与预期对象时,必须对NUnit测试进行比较。好的,我将添加thread.join()并查看。