Mettre en œuvre c# timeout
Est-il une mauvaise pratique de l'utilisation de tels boucle while?
Peut-être que c'est mieux d'utiliser le Chronomètre, ou peut-être que cette solution a des pièges à éviter?
public void DoWork()
{
//do some preparation
DateTime startTime = DateTime.Now;
int rowsCount = 0;
int finalCount = getFinalCount();
do
{
Thread.Sleep(1000);
rowsCount = getRowsCount(); //gets rows count from database, rows are added by external app.
} while (rowsCount < finalCount && DateTime.Now - startTime < TimeSpan.FromMinutes(10));
}
J'ai vu cet article Mettre En Œuvre C# Générique Délai D'Attente,
mais il est trop complexe à utiliser dans les scénarios simples - vous besoin de penser à propos de la synchronisation de threads, est-il convenable de faire avorter ou non, et ainsi de suite.
- Que voulez-vous faire avec la Création d'un TimeOut exactement? Si vous dites à votre entière scenerio, peut-être que nous pouvons vous proposer différentes façon de les utiliser.
- Connexes / dupliquer: stackoverflow.com/questions/3195030/thread-timeout-in-c
- Juste besoin de s'arrêter de travailler après une certaine période de temps de commencer à travailler, si elle passe plus de 10 minutes, arrêter le travail. Le thread qui appelle la méthode peut être bloqué.
- qu'est-ce que le travail? Avez-vous le contrôle de code? Vous rendez-vous compte que par le sommeil, vous ne travaillez pas? Vous souhaiterez peut-être fournir un meilleur exemple.
- Fernandes: mise à jour de la question. getRowsCount obtenir les lignes de table de base de données. Le tableau est mis à jour par app externe, j'ai besoin d'attendre pour un nombre déterminé de lignes dans la base de données de laquelle je reçois avec getFinalCount méthode. Mais il y a peut être une situation que rien n'est mis à jour et à prévenir l'infini, tandis que la boucle je veux attendre un certain temps et puis arrêter le travail.
- Beaucoup mieux maintenant 🙂 De là, il semble que votre solution est raisonnable. Je peux vous proposer une amélioration: comme vous l'avez dit, et Jim suggère ci-dessous, l'utilisation d'un Chronomètre. Selon la façon dont le tableau de remplissage tâche se comporte, vous pouvez également régler la quantité à dormir. Il peut être utile de vérifier plus ou moins souvent.
- Fernandes: oui, ce code est par exemple, je suis en utilisant le réglage de couchage et les délais d'attente dans l'app.config.
Vous devez vous connecter pour publier un commentaire.
Si je comprends bien, vous voulez que votre méthode de travail à faire jusqu'à la fin ou jusqu'à une certaine période de temps s'est écoulé? Je voudrais utiliser un
Stopwatch
pour que, et de vérifier le temps écoulé dans une boucle:DateTime
parce que la date peut changer en dessous de moi viennent de l'Heure d'été. Il pourrait provoquer le code à attendre trop longtemps (une heure et 10 minutes), ou il peut provoquer le code de ne pas attendre assez longtemps. MaisStopwatch
sait combien de minutes se sont écoulées, indépendamment de l'heure qu'il est.sw.Elapsed < maxDuration
est beaucoup plus clair à lire que les formules impliquantDateTime.Now()
.Il est préférable d'utiliser le Système.Les minuteries.Classe Timer.
setTimeout()
méthode ne fait queSystem.Timers.Timer
fait en C#.