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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да нет. Свой сделал. Пока обгоняет брендованные.
А решение в студию будет? :)
...
Рейтинг: 0 / 0
16.12.2015, 03:49
    #39129303
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование async в ReceiveCompleted
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
20.12.2015, 06:04
    #39132486
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование async в ReceiveCompleted
Уважаемые форумчане...

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


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