Я реализовал уже опросника на основе таймера. В качестве примера вы можете думать о 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;
}
Как само соединение осуществляется? Используется ли какая-либо функция async? – YuvShap
Что вы хотите достичь, сделав это? – usr