Comment puis-je obtenir l'équivalent de la Tâche<T>.net 3.5?

J'ai un code qui est à l'aide de Task<T> qui reporte retournant un résultat à partir d'une série d'opérations de lecture pour un court laps de temps, comme ceci:

void ReturnResponseAfterAShortDelay()
{
    if (delayedResponseCancellationTokenSource != null)
        delayedResponseCancellationTokenSource.Cancel(); //Cancel any pending operations and start a new one.

   delayedResponseCancellationTokenSource = new CancellationTokenSource();

   log.InfoFormat("Deferring response for {0} ms", Settings.Default.TimeoutMs);

   Task.Delay(Properties.Settings.Default.TimeoutMs, delayedResponseCancellationTokenSource.Token)
       .ContinueWith((continuation) => ReturnWhateverHasArrived(), TaskContinuationOptions.NotOnCanceled)
       .Start();
}

L'idée de ce code est de retourner le résultat quand pas de nouveaux personnages sont arrivés pour un intervalle de temps spécifié.

Toutefois, en raison de facteurs hors de mon contrôle, je dois utiliser .NET 3.5, qui m'empêche à l'aide de Task<T>, j'ai donc de revoir ce code en quelque sorte.

Comment puis-je obtenir le même résultat, sans l'aide de Task<T>?

Clarification

Bien que le code que j'ai montré arrive à être un temps de retard, mon utilisation n'est pas limitée à retarder les choses. Il peut y avoir d'autres cas où je veux commencer un peu de 'long' interrogation tâche immédiatement. Une situation typique serait un I/O bound opération, par exemple quelque chose de l'périodiquement des requêtes à un périphérique connecté au port série, puis déclenche un événement lorsque certaines conditions sont réunies.

OriginalL'auteur Tim Long | 2014-03-19