Что произойдет, если метод обратного вызова займет больше, чем указанный период времени Таймера? - PullRequest
1 голос
/ 01 марта 2011

У меня есть код ниже.Что произойдет, если метод загрузки займет более одной минуты для завершения?Срабатывает ли таймер еще один вызов метода Upload сразу же после окончания одной минуты или ожидает завершения выполнения метода?Я реализую это как службу Windows.

Protected Overrides Sub OnStart(ByVal args() As String)    
  Dim tmr As Timer = New Timer(New TimerCallback(AddressOf Upload), Nothing, 1000, **60000**)

  While Not tmr Is Nothing
  End While
End Sub

Public Sub Upload(ByVal o As Object)
  Dim sr As StreamReader
  ..........
  ..........
End Sub

1 Ответ

1 голос
/ 01 марта 2011

Хотя часть вашего кода сбивает с толку (что с циклом While?), Я могу сказать, да, Timer скинет еще один Thread с ThreadPool.

Вы можете использовать Monitor, ReaderWriterLockSlim или lock для контроля повторного входа. Вам потребуется объект для блокировки, а другие вещи связаны с вашими требованиями (т. Е. Указанное целое число указывает Monitor попытаться в течение X миллисекунд, где 0 означает, что мы хотим немедленную блокировку):

VB.NET:

Private ReadOnly LockerObject As Object = New Object()

If (Monitor.TryEnter(LockerObject, 0)) Then
    Try
        'do your processing
    Catch

    Finally
        'always release the lock
        Monitor.Exit(LockerObject)
    End Try
End If

C #:

private readonly object LockerObject = new object();

if (Monitor.TryEnter(LockerObject, 0))
{
    try
    {
        //do your processing
    }
    catch
    {
    }
    finally
    {
        //always release the lock
        Monitor.Exit(LockerObject);
    }
}
else
{
    //do something else here if needs be.
}

РЕДАКТИРОВАТЬ: Ой, это VB.NET! Позвольте мне преобразовать мой код ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...