In meiner C# -Anwendung greifen mehrere Clients auf den gleichen Server zu, um einen Client zu einem Zeitpunkt unterhalb des Codes zu verarbeiten. Im Code habe ich die Moniter-Klasse und auch die Queue-Klasse verwendet Leistung.Wenn ich die Monitor-Klasse verwende, dann entferne ich die Queue-Klasse aus dem Code.Thread Monitor Klasse in C#
Manchmal mein Remote-Server-Maschine, wo meine Anwendung als Dienst ausgeführt wird, ist total down.ist der untenstehende Code ist der Grund hinter, coz alle Clients gehen in eine Warteschlange, wenn ich den netstatus -an Befehl mit Eingabeaufforderung überprüfen, für 8 Kunden zeigt es 50 Verbindungen halten in Zeit warten ...
Unten ist mein Code, wo Client den Server acces ...
if (Id == "")
{
System.Threading.Monitor.Enter(this);
try
{
if (Request.AcceptTypes == null)
{
queue.Enqueue(Request.QueryString["sessionid"].Value);
string que = "";
que = queue.Dequeue();
TypeController.session_id = que;
langStr = SessionDatabase.Language;
filter = new AllThingzFilter(SessionDatabase, parameters, langStr);
TypeController.session_id = "";
filter.Execute();
Request.Clear();
return filter.XML;
}
else
{
TypeController.session_id = "";
filter = new AllThingzFilter(SessionDatabase, parameters, langStr);
filter.Execute();
}
}
finally
{
System.Threading.Monitor.Exit(this);
}
}
Welcher Typ ist Ihre Warteschlange? Das Sperren wird nicht empfohlen (Siehe hier: http://www.albahari.com/threading/part2.aspx#_Locking) – weismat
Ich habe meine Warteschlange so definiert .... Warteschlange Warteschlange = neue Warteschlange (); –
user703526
Warum nicht 'lock (this) {...}' verwenden, es ist kürzer als 'Monitor.Enter (this); versuchen {...} schließlich {Monitor.Exit (this); } '. –