如何使用线程去执行一个 有返回值的方法,并获取返回值?

如上面所说

这个问题有点奇怪。。。一般情况需要用线程的话都是异步的,如果是需要等待返回值做处理的情况大部分都是同步的不需要用到多线程(除非是响应式,即线程执行完了,然后促发某个方法来处理某个结果),这种情况的话最好是单独设置一个静态变量来记录这个值,不是用返回值这种概念来做的。。。。。
这个情况用线程做需要处理很多东西,要监听线程的执行情况,或者注册一个事件,线程执行完了促发这个事件,再用事件响应函数来处理结果,不知道你是不是确定这种需求。
如果是winform程序的话就很简单了,直接用backgroundworkder(托管式的后台线程,由系统自动分配线程池中的线程进行异步处理,可以看做多线程的一种解决方案)这个控件就好了。。。直接有异步执行方法和结果事件监听。。。来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-10
可以让线程实现Callable接口,实现call方法,可以把你需要的东西return回去,然后如果是线程池的话可以用Future对象的get()方法来接收这个返回值。但是这样做线程池也只会同步执行一个线程。本回答被网友采纳
第2个回答  2013-03-08
为什么不能得到返回值呢?
c#多线程怎么执行有返回值的方法
同步方法中调用异步方法并取得值:Task<type> taskOfName = Name(params);taskOfName.Start();useTaskResult(taskOfName.Result);对于返回值不再参与计算(如仅仅用于输出)时的建议:Task.Run(() => { routine1; routine2; ...});

QtConcurrent 线程使用说明
run:在线程池中启动一个线程执行某个函数,并能获取函数的返回值。支持传递参数给线程函数。支持成员函数作为线程执行的方案,包括只读和可读写成员函数。map:适用于并行处理数据集,包含 map、mapped、mappedReduced 三种实现。map:用于改变数据并返回结果。mapped:用于不改变数据,仅返回处理结果。mappedR...

c#多线程如何从线程返回值
就可以从后台线程中得到返回值。当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:static void Main(string[] args){ Console.WriteLine("开始计算,请稍候……");\/\/ 直接用Task类 Task<long> result ...

如何在java中获取线程异步执行之后的结果
1.Future<V>接口 Runnable接口执行任务是不返回任何值的,Runnable的run()方法的执行结果是void,而Future接口的call方法是有返回结果的,这是Runnable跟Future的区别之一,它们的另一个不同之处就是实现了Runnable接口的任务执行是调用ExecutorService的execute(Runnable task)方法,而实现了Future接口的任务是...

Java回调以及如何获取线程的执行结果
在实际工作中,我们通常将方法A以interface或者内部类的形式来实现,然后把包含有A的类的对象引用传递到观察者中。Java中的线程的返回值是void,并且是一个异步执行流,所以我们没有直接的方法来获取线程执行后的结果,即不能直接知道线程何时结束,以及合适去获取线程执行任务后的结果。由于回调的存在,...

Callable原理,线程池执行Callable任务
使用方法:实现Callable接口需要重写call方法,该方法可以抛出异常并返回指定的结果类型。 配合FutureTask使用:FutureTask是一个实现了Runnable接口的类,它可以接受一个Callable对象作为参数。当FutureTask的run方法被调用时,它会执行Callable的call方法,并将结果存储在内部。通过调用FutureTask的get方法,可以获取C...

创建线程的方式
1.继承thread类 2.实现runnable接口 有返回值:3.callable接口 4.线程池 也可以说是三种方式,线程池是一种封装好的技术。实现callable接口会有一个泛型,这泛型即代表返回值的类型。重写call()方法,得到返回值。然后注意这里使用的时候是先将实例传入FutureTask,然后再将FutureTask传入thread类。然后再...

C#中如何为一个有返回值的函数添加新线程
public class A{ public string Test() => null; public void Main() { \/\/方式1:TAP 异步模式 Task<string> task = Task.Run(new Func<string>(Test)); \/\/做些别的事情...然后获取结果 task.Wait(); string result1 = task.Result; \/\/方式2:APM 异步模式...

Callable<V>接口
获取执行结果:通过Future对象的get方法,可以获取Callable任务执行后的结果。如果任务尚未完成,get方法会阻塞当前线程,直到任务完成并返回结果。增加代码的灵活性:泛型的使用使得Callable接口在处理不同类型返回值的任务时更加灵活。可以根据任务的实际需求,指定不同的返回值类型。综上所述,Callable接口是...

多线程系列(十九) -Future使用详解
当使用ExecutorService.submit()方法时,返回的Future实例可以用于获取异步任务的结果。接下来,我们通过一个简单示例来直观理解:通过上述示例,可以总结异步获取结果的通用步骤:定义一个Callable接口方法,然后将其实例化为FutureTask提交给线程池,最后通过Future接口获取执行结果。Future接口本身是一个接口,其...

相似回答