如何在C#多线程程序中接受lambda表达式的返回值

时间:2014-10-24 18:42:42

标签: c# lambda return

如何使用参数化函数的返回值作为参数传递给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();
                    }
                }
            }

1 个答案:

答案 0 :(得分:1)

使用Task,特别是Task.Run。它专门用于表示另一个线程中的值的计算,而不是在另一个线程中执行void方法。在处理结果时,它还将适当地处理线程之间的所有同步。

至于为什么你的代码不起作用,线程不一定会在你打印出来时计算结果。为了使程序可靠地工作,除了正确地同步线程之间共享的内存之外,还需要等待线程完成。开始一个新线程只是为了立即等待它完成当然是没有意义的;你也可以只计算原始线程中的值。