подпрограммы ConnectCallback, ReceiveCallback, SendCallback
в примере вызываются в новом потоке ? сколько таких потоков он может вызвать?
Почему в этих подпрограммах мы вызываем .EndSend .EndReceive с параметром (для чего этот папаметр нужен)?
Здравствуйте, VVVa, Вы писали:
VVV>подпрограммы ConnectCallback, ReceiveCallback, SendCallback в примере вызываются в новом потоке ? сколько таких потоков он может вызвать?
Во-первых — не подпрограммы, а методы, а во-вторых — кто ОН?
VVV>Почему в этих подпрограммах мы вызываем .EndSend .EndReceive с параметром (для чего этот папаметр нужен)?
Потому, что надо посмотреть в документацию и прочитать, как работает BeginЧто-то и зачем потом надо вызывать EndЧто-то и что за параметр там передается.
Здравствуйте, VVVa, Вы писали:
N_C>>Потому, что надо посмотреть в документацию и прочитать, как работает BeginЧто-то и зачем потом надо вызывать EndЧто-то и что за параметр там передается.
VVV>прочитал непомогло ;( дак эти методы в отдельных потоках будут вызваны?
Дык уже ж отвечали на похожее
https://rsdn.org/forum/network/7015328Автор: VVVa
Дата: 10.01.18
Колбэки зовутся асинхронно, в другом потоке. Таких асинхронных вызовов может быть несколько одновременно. В каком потоке дёргать колбэк (в одном и том же или каждый раз в разных), решает система.
Как разобраться, какой колбэк относится к какому асинхронному запросу? Надо запоминать результаты BeginXXX-вызовов (тут в примерах от MS провал, конечно). Т.е. begin-метод вернул IAsyncResult, запомнили где-то у себя. Далее колбэк будет позван с тем же экземпляром IAsyncResult. Ну и в конце дёргаем end-метод с тем же IAsyncResult, чтобы оно не висело в системе мёртвым грузом незавершённых асинхронностей.
Например, коннектимся таким псевдокодом:
a1 = BeginConnect(google);
a2 = BeginConnect(facebook);
a3 = BeginConnect(instagram);
далее где-то в другом потоке оно системой дёргается, например, в таком порядке:
ConnectCallBack(a1);
ConnectCallBack(a3);
ConnectCallBack(a2); // например, фейсбук где-то стормозил и отстал