|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
Есть сокет сервер. Сериализация и прочая магия сейчас не важна, суть в том, что если сообщение пришло полностью - вызывается метод допустим public void OnMyCoolMessage(Message m). Хочу уметь в этом методе async операции (поход в базу и т.д.) Как-бы я делал это сам: Так как ReceiveCompleted вызывается в каком-то потоке из ThreadPool, то хочется следующего - если случилось AsyncIO - "отпустить" тред и подождать пока это IO закончится. Но я не понимаю 1) Как вызвать async метод через MethodInfo? (Я хочу чтобы он выполнялся в текущем треде, до тех пор, пока не встанет в asyncIO и сказал-бы мне, что он или закончился или встал в асинке) 2) Достаточно-ли, если метод встал в асинке - просто завершить ReceiveCompleted? То есть вызовет-ли SyncronizationContext, по завершению асинка, дальше код? Извините, если довольно сумбурно. Я не так хорош в ботнете. То есть я знаю как я-бы это сделал, но я не знаю как это выразить в шарпе. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2015, 15:28 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
Warstone, Не изобретайте велосипед, а лучше почитайте о async, await и Task, которые появились в .NET с 4.5 версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 13:14 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
Axeleron, Так я про них и спрашиваю, если вы не соизволили прочесть пост не по диагонали. Как запустить async метод так, чтобы он начал выполняться до первой async операции. Проблема в том, что async void не кастуется к Task. Иначе-бы все было предельно ясно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 13:30 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
WarstoneПроблема в том, что async void не кастуется к Task. Иначе-бы все было предельно ясно. А Вас в гугле забанили? Лень открыть и почитать по сабжекту? Если Вы соизволили бы открыть и прочесть первые 2-3 параграфа, то узнали бы, что void нельзя использовать как возвращаемый тип асинхронных методов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 14:09 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
WarstoneAxeleron, Так я про них и спрашиваю, если вы не соизволили прочесть пост не по диагонали. Как запустить async метод так, чтобы он начал выполняться до первой async операции. Проблема в том, что async void не кастуется к Task. Иначе-бы все было предельно ясно. мне кажется там не нужно двойное отрицание ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 14:34 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
Axeleron, Хорошо... Документацию читал, но слишком много и "рядом". Следующий вопрос... Есть Task. Как сделать так, чтобы он начал выполняться в текущем треде до тех пор, пока не вошел в ожидание асинхронного IO и только потом начал шедулится? Смысл этой затеи в том, что у меня уже есть тред, в котором можно сделать часть работы и не надо лишний раз заставлять шедулер выделять тред. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 21:44 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
Вопрос глупый - вопрос снимается. Все работает как я хочу из коробки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 23:18 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
WarstoneВопрос глупый - вопрос снимается. Все работает как я хочу из коробки. Как-таки справились? Плюнули на свой велосипед, купили уже готовый брендовый? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 00:42 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
Axeleron, Да нет. Свой сделал. Пока обгоняет брендованные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 17:12 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
WarstoneAxeleron, Да нет. Свой сделал. Пока обгоняет брендованные. А решение в студию будет? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 17:28 |
|
Использование async в ReceiveCompleted
|
|||
---|---|---|---|
#18+
Axeleron, Эм... Решение чего? Асинка? Сейчас переписывается, так как оказалось что Юнити не умеет Асинк. Приходится разбивать... Базу под 2.0, "наслоение" под 4.5 (или когда там асинки появились). Если код конкретно того, что я хотел, то вот: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 03:49 |
|
|
start [/forum/topic.php?fid=20&fpage=70&tid=1400952]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 146ms |
0 / 0 |