在C#中多线程运行一旦开启,是没办直接返回你要的结果的,但有时候我们确实需要线程给我们结果要怎么做呢?
答案是传递一个回调函数。看具体的例子,假设我有一个求自然数的累加和函数,我想让一个线程单独运行,且返回结果。
构建一个类:
public class NumberHelper
{
private int _Number;
private Action<int> _Action;
public NumberHelper(int number,Action<int> resultCallback)
{
_Number = number;
_Action = resultCallback;
}
public void Calculate()
{
int result = 0;
for(int i=0;i<_Number;i++)
{
result += i;
}
if(_Action != null)
{
_Action(result);
}
}
}
这个类不仅接受参数Number,还接受一个回调函数:Action<int>.在计算完成前将结果传递给回调函数。
我们在调用的时候就很简单了:
NumberHelper g = new NumberHelper(10, ResultCallBackMethod);
Thread t2 = new Thread(g.Calculate);
t2.Start();
static void ResultCallBackMethod(int Result)
{
Console.WriteLine($"累加和为: {Result}");
}
这里只是简单地打印,事实上还可以将取值拿出来,做法类似于上一节提到的如何给多线程函数传递安全类型参数。