J'ai travaillé sur la mise en place d'un accélérateur pour limiter le nombre de messages envoyés. Bien que cela fonctionne, je suis curieux de savoir s'il existe un meilleur moyen? Tout conseil est apprécié.Révision de code (première tentative de multithreading)
public Class MyApp
{
private long _messagesSent;
private long _totalMessagesSent;
public int NumberOfMessages { get; set; }
public int MessagesPerSecond { get; set; }
public void SendMessage()
{
ThreadholdMonitor.Start();
for (var i = 0; i < NumberOfMessages; i++) {
// Code here...
if (MessagesPerSecond <= _messagesSent) {
ThreadholdMonitor.StopSendingEvent.Set();
lock (this) {
var hasPrinted = false;
while (ThreadholdMonitor.StopSendingEvent.WaitOne(0, false)) {
if (hasPrinted == false) {
Console.WriteLine("Sent " + _messagesSent + " messages");
hasPrinted = true;
}
Interlocked.Exchange(ref _messagesSent, 0);
}
}
}
SendMessage(details);
Interlocked.Increment(ref _messagesSent);
Interlocked.Increment(ref _totalMessagesSent);
}
ThreadholdMonitor.Stop();
}
}
public class ThreadholdMonitor
{
private static ManualResetEvent _monitorEvent;
public static ManualResetEvent StopSendingEvent { get; set; }
public static void Start()
{
_monitorEvent = new ManualResetEvent(false);
StopSendingEvent = new ManualResetEvent(false);
Thread monitorThread = new Thread(new ThreadStart(ControlSharedSignal));
monitorThread.Start();
}
public static void Stop()
{
_monitorEvent.Set();
}
private static void ControlSharedSignal()
{
var startTime = DateTime.Now;
while (_monitorEvent.WaitOne(0, false) == false) {
if (DateTime.Now.Subtract(startTime).Seconds >= 1) {
StopSendingEvent.Reset();
startTime = DateTime.Now;
}
}
}
}
Il y a trop de code et pas assez de commentaires. Veuillez expliquer ce que ce code essaie de faire. –
Nonsense, vous n'avez pas besoin de commentaires. Mais vous avez besoin d'un code qui peut être lu et compris sans commentaires si vous n'allez pas les avoir. Ce qui est ce que vous devriez avoir de toute façon. –
Mes excuses si c'est illisible ... c'était ma première tentative. :( – Ryan