等待函数完成,直到回调到来

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 线程上。我的问题是,我该如何执行这个等待?不应该我是否应该这样做:) 我会尝试使用信号量方法,谢谢

以上是关于等待函数完成,直到回调到来的主要内容,如果未能解决你的问题,请参考以下文章

等待异步函数完成而不添加回调

函数等待返回直到 $.getJSON 完成

如何等待递归直到函数完成执行

如何在 JS(节点)中使用回调来等待 Async 函数完成后再继续?

python实现异步调用函数执行

解决回调函数