我已經實現了基於Timer的輪詢工作。舉例來說,你可以在客戶端考慮TryConnect
- 我打電話TryConnect
,它最終會在一段時間內連接。它處理多個線程,如果連接正在處理中,所有後續的TryConnect
都會立即返回而不需要任何額外的操作。在內部,我簡單地創建一個計時器,並在間隔期間嘗試連接 - 如果連接失敗,我再試一次。等等。如何將時基輪詢與可等待的任務結合起來
小缺點是它是「火&忘記」的格局,現在我想將其聯合「異步/等待」的格局,即不是調用:
client.TryConnect(); // returns immediately
// cannot tell if I am connected at this point
我想這樣稱呼它:
await client.TryConnect();
// I am connected for sure
如何更改我的實現以支持「async/await」?我在想創建空Task
(只是await
),然後用FromResult
完成它,但這種方法創建一個新的任務,不完成給定的實例。
根據記錄,當前的實現看起來像這樣(只是一個代碼的草圖):
public void TryConnect()
{
if (this.timer!=null)
{
this.timer = new Timer(_ => tryConnect(),null,-1,-1);
this.timer.Change(0,-1);
}
}
private void tryConnect()
{
if (/*connection failed*/)
this.timer.Change(interval,-1);
else
this.timer = null;
}
如何連接本身來實現?它使用任何異步函數? – YuvShap
你想通過這樣做來達到什麼目的? – usr