Таймеры VB.NET на стороне сервера - PullRequest
1 голос
/ 22 апреля 2011

У меня есть ситуация, когда я пытаюсь от части клиента выполнить вызов части сервера.

Мне нужно сделать это синхронно. Однако в моем коде на стороне сервера я вызываю другой фрагмент кода, который я хочу иметь максимум, скажем, 10 секунд, чтобы вернуть значение.

Если у меня нет ответа в течение 10 секунд, я хочу заставить свой собственный серверный компонент установить мой результат равным 0 и вернуться к клиенту.

Вот что у меня есть в моем серверном коде:

   Public Function GetWebResult(ByVal inputParameter As Object) As WebReturnObject Implements IWebInterface.GetWebResult
      Dim result As New WebReturnObject
      Dim webItem As WebItem = Nothing

      _timer = New Timers.Timer
      AddHandler _timer.Elapsed, AddressOf HandleTimerElapsed
      _timer.Interval = 10000 '10 Seconds'
      _timer.AutoReset = False

      _timer.Start()
      webItem = GetAWebItem(inputParameter)
      _timer.Stop()

      result = webItem
      Return result
   End Function

   Private Sub HandleTimerElapsed(ByVal sender as Object, ByVal e As System.Timers.ElapsedEventArgs) Handles _timer.Elapsed
      'result.HasTimedOut = True'
      'result.Value = 0'
      'How do I then get back into GetWebResult?'
   End Sub

Я понимаю, что этот код не работает. Проблема в том, что я не уверен, как мне вернуться к GetWebResult, чтобы установить соответствующие возвращаемые значения, прежде чем они будут отправлены обратно клиенту.

У меня уже была проблема с Google, и результаты были скудными. Лучшие ресурсы, которые мне удалось найти, - это документация MSDN для класса Timers.Timer , но даже это не очень полезно, учитывая мою ситуацию.

Если у кого-то есть ссылки, предложения и т. Д., Я был бы очень признателен.

1 Ответ

1 голос
/ 22 апреля 2011

Вызовите метод асинхронно с таймаутом (10 секунд), в течение которого вы вернетесь в GetWebResult независимо от завершения вызова метода, после чего вы сможете вернуться оттуда. Образец здесь

...