Ich arbeite an einer P2P-Anwendung in C#. Es ist eine Dateiübertragung mit einer Dateiaufteilung und Text-Chat.Zwei Threads arbeiten auf der gleichen Liste
Auf einem Client gibt es 2 Threads, 1 zum Abhören, 1 zum Senden. Wenn ich eine Datei sende, wird sie zuerst in etwa 10 Teile aufgeteilt, diese 10 Teile werden zu einer Sendewarteschlange im Client hinzugefügt, dann beginnt sie den Dateiblock 1 zu senden. Aber jetzt möchte ich eine Nachricht über dieselbe Pipe senden . Meine Idee ist dann, diese Nachricht in die Sendeliste vor Datei Chunk 2 einzufügen. Welche Art von Threading brauche ich für 2 Threads auf der gleichen Liste arbeiten? Ich habe die auf diese Weise empfangenen Objekte berücksichtigt.
Meine erste Idee für die Sendefunktion war etwas in diese Richtung:
public void Send()
{
while (IsConnected())
{
if (unSentObjects.Count > 1)
{
Task sendTask = new Task(() => SendObj(unSentObjects[0]));
sendTask.Start();
}
}
}
Wie eine Flagge, die ein 'bool' heißt' ItemInUse'. Dieses Objekt muss auf den Zugriff warten und verwendet Synchronisationsobjekte. Die tatsächlichen Daten für Ihre Anwendung nicht. Wenn "ItemInUse" den Wert false hat, setzen Sie es auf "true" und führen Sie dann mit den Daten aus, was immer Sie möchten. Wenn Sie fertig sind, setzen Sie es erneut auf "false". –
Die Warteschlange ist lokal für den Absender-Thread, dann fügt Thread 2 der sendenden Warteschlange neue Objekte hinzu. Aber ich kann das nicht tun, weil du sagst, dass es simultanes Lesen/Schreiben ist, aber gibt es keine Möglichkeit, ein neues Objekt hinzuzufügen, nachdem es Chunk 1 gesendet hat? – BoinQ