如何使用参数化函数的返回值作为参数传递给C#中的线程? 以下代码不起作用。任何更简单的替代方案?
namespace Param_thread
{
class Program
{
static int largest(int x,int y)
{
if (x > y)
return x;
else
return y;
}
static void Main(string[] args)
{
int result;
Thread finder = new Thread(()=> (result=largest(4, 5)));
finder.Start();
Console.WriteLine(result + " is greater");
Console.ReadLine();
}
}
}
答案 0 :(得分:1)
使用Task
,特别是Task.Run
。它专门用于表示另一个线程中的值的计算,而不是在另一个线程中执行void
方法。在处理结果时,它还将适当地处理线程之间的所有同步。
至于为什么你的代码不起作用,线程不一定会在你打印出来时计算结果。为了使程序可靠地工作,除了正确地同步线程之间共享的内存之外,还需要等待线程完成。开始一个新线程只是为了立即等待它完成当然是没有意义的;你也可以只计算原始线程中的值。