/ / Czy mogę używać gniazd asynchronicznych i synchronicznych w jednym projekcie? - c #, gniazda

Czy mogę używać gniazd Asynchronicznych i Synchronicznych w jednym projekcie? - c #, gniazda

Muszę mieć możliwość asynchronicznego odbieraniawiadomości z serwera w dowolnym momencie. Jednak chcę też używać gniazd synchronicznych; kiedy wysyłam wiadomość, chcę zablokować, dopóki nie otrzymam odpowiedzi. Czy synchroniczne i asynchroniczne dobrze ze sobą grają, czy też będą powodować problemy?

Innymi słowy, używam BeginReceive() asynchronicznie słuchać. Jeśli zadzwonię Receive() (wersja synchroniczna, jak rozumiem), czy następna przychodząca wiadomość zostanie odebrana przez wywołanie zwrotne Odbierz BeginReceive callback, zarówno, ani, ani gorzej?

Dzieje się tak na kliencie, serwer może pozostać w 100% asynchroniczny.

Odpowiedzi:

0 dla odpowiedzi № 1

Czy synchroniczne i asynchroniczne grają ze sobą dobrze?

Nie. Ogólnie rzecz biorąc, nie grają razem dobrze.

To nie znaczy, że nigdy nie da się tego zrobić, aleczasami jest to niemożliwe i zazwyczaj mylące i trudne do pracy. Jeśli nie masz przekonującego powodu, aby zrobić inaczej, sugerowałbym trzymanie się tylko jednego lub drugiego.


0 dla odpowiedzi nr 2

Z MSDN:

BeginReceive: „Zaczyna się asynchronicznie odbierać dane z podłączonego gniazda. ”

Powiedziałbym więc, że nawet jeśli BeginReceive pochodzi z klasy Socket, która ma odbierać dane asynchroniczne, to jako metoda Receive jest używana do pobierania danych synchronicznie ze związanej skarpety.


0 dla odpowiedzi № 3

Tak, jest to całkowicie możliwe, sztuczka polega na ukryciu asynchronicznego zachowania w opakowaniu, które „pojawia się”, aby działać synchronicznie. Jest artykuł na ten temat tutaj dla biblioteki sieciowej NetworkComms.Net.

Zastrzeżenie: „Jestem programistą tej biblioteki.