等待函数完成,直到回调到来
Posted
技术标签:
【中文标题】等待函数完成,直到回调到来【英文标题】:Wait with function completion untill the callback will come 【发布时间】:2019-05-11 13:09:40 【问题描述】:我正在尝试实现机制,这将让我等待函数完成(特别是返回调用),直到我在接收器中得到一些响应。接收方正在等待来自 API 的某些调用或其他一些耗时操作的响应。
我试图做一个在布尔标志(易失性)上运行的 while 循环,该标志应该在接收器中更改,但结果是循环永远运行并且标志永远不会改变。
我也尝试实现一个等待通知机制,而且,等待函数“阻止”接收者调用通知。
编辑:我也尝试使用 BlockingQueue,但也没有运气。
我在我的实现中附上了一些示例代码。
public String getRemoteInfo()
getInfo();
while (!finished)
Uninterruptibles.sleepUninterruptibly(200, TimeUnit.MILLISECONDS);
return globalResult;
private void getInfo()
service.getInfo(this); //"this" is an implementation of receiver
@Override
public void infoReceived(String result)
globalResult = result;
finished = true;
【问题讨论】:
可能接口可以工作.. @AbhayKoradiya 实际上,由于其他一些架构原因,这个返回 String 的方法应该保持同步。我正在寻找延迟方法完成的方法(即使它冻结线程几秒钟) 【参考方案1】:这是一种可怕的做法——这样的睡眠称为轮询,它对性能、电池寿命等不利。正确的做法是使用信号量,并让希望等待的线程等待信号量,在后台执行的函数会在信号量完成时发出信号。
请注意,您永远不要在 UI 线程上这样等待,因为您的应用在等待时会无响应。
【讨论】:
是的,我知道我不应该在 UI 线程上执行此操作,但最终在这种情况下,等待将发生在其他非 UI 线程上。我的问题是,我该如何执行这个等待?不应该我是否应该这样做:) 我会尝试使用信号量方法,谢谢以上是关于等待函数完成,直到回调到来的主要内容,如果未能解决你的问题,请参考以下文章