powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование async в ReceiveCompleted
12 сообщений из 12, страница 1 из 1
Использование async в ReceiveCompleted
    #39126700
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сокет сервер.
Сериализация и прочая магия сейчас не важна, суть в том, что если сообщение пришло полностью - вызывается метод допустим public void OnMyCoolMessage(Message m).
Хочу уметь в этом методе async операции (поход в базу и т.д.)

Как-бы я делал это сам:
Так как ReceiveCompleted вызывается в каком-то потоке из ThreadPool, то хочется следующего - если случилось AsyncIO - "отпустить" тред и подождать пока это IO закончится. Но я не понимаю
1) Как вызвать async метод через MethodInfo? (Я хочу чтобы он выполнялся в текущем треде, до тех пор, пока не встанет в asyncIO и сказал-бы мне, что он или закончился или встал в асинке)
2) Достаточно-ли, если метод встал в асинке - просто завершить ReceiveCompleted? То есть вызовет-ли SyncronizationContext, по завершению асинка, дальше код?

Извините, если довольно сумбурно. Я не так хорош в ботнете. То есть я знаю как я-бы это сделал, но я не знаю как это выразить в шарпе.
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39127218
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Warstone,
Не изобретайте велосипед, а лучше почитайте о async, await и Task, которые появились в .NET с 4.5 версии.
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39127251
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Так я про них и спрашиваю, если вы не соизволили прочесть пост не по диагонали.

Как запустить async метод так, чтобы он начал выполняться до первой async операции.

Проблема в том, что async void не кастуется к Task. Иначе-бы все было предельно ясно.
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39127317
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarstoneПроблема в том, что async void не кастуется к Task. Иначе-бы все было предельно ясно.
А Вас в гугле забанили? Лень открыть и почитать по сабжекту? Если Вы соизволили бы открыть и прочесть первые 2-3 параграфа, то узнали бы, что void нельзя использовать как возвращаемый тип асинхронных методов.
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39127351
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarstoneAxeleron,

Так я про них и спрашиваю, если вы не соизволили прочесть пост не по диагонали.

Как запустить async метод так, чтобы он начал выполняться до первой async операции.

Проблема в том, что async void не кастуется к Task. Иначе-бы все было предельно ясно.

мне кажется там не нужно двойное отрицание
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39127794
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Хорошо... Документацию читал, но слишком много и "рядом".

Следующий вопрос... Есть Task. Как сделать так, чтобы он начал выполняться в текущем треде до тех пор, пока не вошел в ожидание асинхронного IO и только потом начал шедулится?

Смысл этой затеи в том, что у меня уже есть тред, в котором можно сделать часть работы и не надо лишний раз заставлять шедулер выделять тред.
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39127861
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос глупый - вопрос снимается. Все работает как я хочу из коробки.
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39127926
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarstoneВопрос глупый - вопрос снимается. Все работает как я хочу из коробки.
Как-таки справились? Плюнули на свой велосипед, купили уже готовый брендовый?
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39128872
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Да нет. Свой сделал. Пока обгоняет брендованные.
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39128892
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarstoneAxeleron,

Да нет. Свой сделал. Пока обгоняет брендованные.
А решение в студию будет? :)
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39129303
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Эм... Решение чего? Асинка? Сейчас переписывается, так как оказалось что Юнити не умеет Асинк. Приходится разбивать... Базу под 2.0, "наслоение" под 4.5 (или когда там асинки появились).

Если код конкретно того, что я хотел, то вот:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
                            if (mi.GetCustomAttribute(_asyncAttribute) != null) {
                                Task task = InvokeAsync(mi, nm);
                                if (!task.IsCompleted) {
                                    _currentInvokingTask = task;
                                    return false;
                                }
                            } else {
                                mi.Invoke(this, nm.MethodArguments);
                            }
...

        private async Task InvokeAsync(MethodInfo mi, NetworkMessage nm) {
...
            await (Task)mi.Invoke(this, nm.MethodArguments);
            AfterInvoked(nm, leMsg);
...
        }
...
Рейтинг: 0 / 0
Использование async в ReceiveCompleted
    #39132486
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые форумчане...

16К/тред в секунду для RPC сервера с подтверждением выполнения - это нормально для Шарпа?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование async в ReceiveCompleted
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]