J'ai une chaîne observable, l'observable initial est du réseau, et sera déclenché chaque fois que le message est prêt à être lu. Le gestionnaire suivant lit alors le message et le désérialise. Maintenant, j'ai une fourchette de l'observable, l'un est gestionnaire de messages et l'autre enregistre le message.f # effet de fourche observable et effet secondaire
Le problème est que parce que je suis à l'aide observable je vais essayer effectivement de lire le message deux fois.
Je comprends que l'utilisation de l'événement au lieu de Observable résoudra la question, mais je devrai alors un problème de collecte des ordures qui pourraient provoquer des prises de ne pas être collectées.
Une solution à laquelle j'ai pensé est d'insérer une sorte de séparateur qui termine une chaîne d'observables et en crée une nouvelle, une telle fonction existe-t-elle déjà dans fsharp ou une autre bibliothèque de bibliothèques.
Existe-t-il d'autres solutions au problème?
Edit:
Exemple de codequi ne fonctionne pas correctement
let messagesStream =
socket.observable |>
Observable.map (fun() -> socket.read()) |>
Observable.map (fun m -> deserialize m)
messagesStream |> Observable.add (fun m -> printf m)
messagesStream |> Observable.add (fun m -> handle m)
Du côté: Vous devez mettre les tuyaux avant * avant * la fonction que vous tuyau dans, non * derrière * la valeur tuyau. Les aligner de cette façon rend beaucoup plus clair ce qui se passe. – TeaDrivenDev
Chaque abonnement à ab observable pipeline provoque un abonnement à la source observable. Vous créez deux abonnements à 'socket.observable'. Vous devriez essayer de mettre un opérateur de publication à la fin de l'observable 'messagesStream'. – Enigmativity
Merci, j'ai trouvé sur une publication, connaissez-vous une bibliothèque pour f # avec fonction de publication? Si vous pouvez ajouter un exemple de réponse et de code, je le marquerai comme la réponse. Merci – somdoron