我有一個目前看起來是這樣的(僞僞代碼)類:檢查異步方法在析構函數完成
class AsyncStore {
public:
AsyncStore();
~AsyncStore() {
// Make sure writes have flushed somehow
}
void write_something() {
// Issue an asynchronous write, and return immediately
}
void sync_writes() {
// Check all writes could be flushed, and throw if any failed
}
};
這有析構函數沒有辦法發出錯誤信號的(問題我們不能拋出,並且我們不能以任何其他方式表示錯誤)。
理想情況下,此類的用戶在調用析構函數之前會調用sync_writes()
,並處理所有拋出的異常,這樣在銷燬時就沒有任何事情可做。
就目前而言,無法執行此操作。感覺這肯定是一個相對常見的問題 - 有沒有辦法處理這個問題,我可以保證在銷燬時沒有掛起寫入操作?
「我們不能以任何其他方式表示有錯誤」。誰說的? –
你會如何在析構函數中指示錯誤?您不能拋出或返回錯誤狀態。 –
有很多方法可以發出錯誤信號。您可以將消息記錄到文件中,或者將值推送到日誌容器以便稍後處理。這取決於誰應該接收你的信號。 –