Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
TaskCompletionsource nach benutzen nochmal verwenden
filmee24
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

TaskCompletionsource nach benutzen nochmal verwenden

beantworten | zitieren | melden

hallo,

ich hab einen kleinen rpc service mit memory mapped files geschrieben.
das problem ist, dass man nur eine methode ausführen kann, da der TaskCompletionSource ne Exception wirft, sobald einmal der Result gesetzt wurde.

Hier mal mein Code:


TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
private void Sender_DataReceived(object sender, MemoryMappedDataReceivedEventArgs e)
        {
            var response = (RpcMethodAwnser)RpcServices.Deserialize(e.Data);

            tcs.SetResult(response.ReturnValue); // Exception: Kann nicht gesetzt werden, weil Task bereits abgeschlossen ist
        }

der communicator ist vom MemoryMappedFile Sample von Microsoft.

Vielleicht kann mir jemand helfen.

Vielen Dank
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von filmee24 am .
C. Anders

Moderationshinweis von Coffeebean (25.10.2018 - 08:27:55):

Ich habe den Codelink mal entfernt. Bitte beachte [Hinweis] Wie poste ich richtig? und poste die _relevanten_ Codestellen mit den entsprechenden Tags bitte im Beitrag. Danke!

private Nachricht | Beiträge des Benutzers
filmee24
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

*edit erledigt, hab die TCS durch ein ManualReset Ersetzt
C. Anders
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7547
Herkunft: Waidring

beantworten | zitieren | melden

Hallo filmee24,

noch als Ergänzung:
Zitat
TaskCompletionSource ne Exception wirft, sobald einmal der Result gesetzt wurde.
Das ist auch gut so, denn die TCS lässt sich nur einmal verwenden. Sie ist eben ein Produzent für einen Task, der zugleich auch dessen Endstatus steuert (Completed, Exception, ...).
Könnte mit einer TCS mehrere Tasks "gesteuert" werden, so würde das die Tür für jede Menge Bugs, bedingt durch Race conditions, öffnen. Daher wurde dieses Verhalten unterbunden.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers