.net 返回Null的对象:线程执行
我试图在线程范围内分配EmployeeModel对象并运行它之后返回它。return_Employee对象即使在运行之后也会返回Null值。AddEmployee是返回类型EmployeeModel对象的另一种方法 我实际上需要线程方法具有返回类型,以便在单元测试项目中使用它.net 返回Null的对象:线程执行,.net,multithreading,.net,Multithreading,我试图在线程范围内分配EmployeeModel对象并运行它之后返回它。return_Employee对象即使在运行之后也会返回Null值。AddEmployee是返回类型EmployeeModel对象的另一种方法 我实际上需要线程方法具有返回类型,以便在单元测试项目中使用它 public EmployeeModel AddEmployeeUsingThread(int emp_ID, decimal basicPay, decimal deductions, de
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重构这个代码吗?@InterStellaRthread.Join()线程.Start()之后缺少代码>方法调用
Yes,要完成代码并仍然使用线程,可以添加thread.Join()代码>,但我不认为在这里使用线程有什么意义。如果可以在线程执行时执行其他操作,那么线程非常有用。在这种情况下,没有必要暂停一个线程,等待刚刚开始的另一个线程完成。我会直接调用这个方法,而不涉及线程,因为你从中完全得不到任何好处。不,实际上,我是在比较使用线程和非线程(默认方法)的执行时间,作为我训练练习的一部分。在验证返回对象与预期对象时,必须对NUnit测试进行比较。好的,我将添加thread.join()并查看。