2016-11-25 2 views
0

Je dois faire un processus pour lire certaines informations et retourner un résultat, malheureusement la bibliothèque que j'utilise pour lire le résultat des événements, et j'ai besoin d'un processus synchrone pour obtenez le résultat. J'ai fait le code suivant, et cela fonctionne parfaitement, mais je dois implémenter un timeout pour lancer une exception quand le temps est levé, et cette fois pourrait être différent pour différentes lectures.La meilleure façon d'implémenter un timeout dans un processus de lecture en C#

public class Process 
{ 
    private readonly Reader _reader; 

    public Process() 
    { 
     _reader = new Reader(); 
    } 

    public string Read() 
    { 
     string result = null; 

     ReadEventHandler handler = (sender, e) => 
     { 
      if (!IsDataValid(e.Data)) return; 

      result = e.Data; 
     }; 

     _reader.OnRead += handler; 

     while (result == null) 
     { 
      _reader.Read(); 
      Thread.Sleep(1000); 
     } 

     _reader.OnRead -= handler; 

     return result; 
    } 

    private bool IsDataValid(string data) 
    { 
     //Here I will evaluate the info returned by the reader 
     return true; 
    } 
} 

Répondre