2017-03-17 49 views
2

我正在與IBM WorkManager (v8.0.0)一起工作,對主線程執行一些異步工作。如何在完成WorkEvent時通知mainthread異常?

爲此,我使用下面的代碼:

// wm = via resource injected WorkManager 

WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener() { 

    @Override 
    public void workStarted(WorkEvent arg0) { 
    } 

    @Override 
    public void workRejected(WorkEvent arg0) { 
    } 

    @Override 
    public void workCompleted(WorkEvent arg0) { 
    WorkException exception = arg0.getException(); 
    if (null != exception) { 
     throw new RuntimeException("WorkCompleted with Exception"); 
    } 
    } 

    @Override 
    public void workAccepted(WorkEvent arg0) { 
    } 
}); 

這工作得很好,只要在WorkEvent完成無異常。但是當它完成時有一個異常,我想通知主線程停止向WorkManager提交更多的WorkItems。

我以爲我可以提出一個RunetimeException通知mainthread,但分析日誌我發現異常在那一刻mainthreads完成提交所有WorkItemsWorkManager拋出調用WorkManagerjoin - 方法 - 這太晚了(在大多數情況下,需要通過WorkManager來完成50.000項)。

那麼,如何在workCompleted中識別異常時立即中斷我的主線程以停止向WorkManager提交更多項目?

+0

很高興它結束了! – GhostCat

回答

1

然後您需要一個「更直接」的界面。

含義;你是顯示調用代碼:

WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener() 

包含的指令需要一些「輸入」通道類;例如,該類別中可能存在一個「簡單」字段List<Exception>,表示您的工作項目將其例外添加到

而你創建這些工作項目的「主」類應定期檢查該列表;只要發現異常就停止添加新的工作項目。

當然,你必須使該線程安全,並提供一個合理的架構。

+0

感謝您的回覆。我已經實施了這樣一個「橋樑」,並將在稍後進行測試。 – bish

相關問題