[VS2015U2] применение корутин
От: uzhas Ниоткуда  
Дата: 20.06.16 16:55
Оценка:
приветствую.
слышал, что в VS2015U2 есть await
кто-нибудь уже игрался? какие отзывы можете дать по безглючности и какие прикладные задачи вы успешно решили с помощью этой фичи?
так же интересует каким образом можно реализовать следующую задачу:
у меня внутри приложения есть два слоя rpc:
1) по сети от внешний клиентов, своя либа без возможности прикрутить корутины
2) свой rpc (то есть там не сеть, а своя шина c потоками и очередями сообщений), хочу его завернуть в корутины в надежде, что код упростится

какие вспомогательные вещи надо написать, чтобы код вызывающей стороны упростился без пенальти по производительности?

пример текущего кода
class InputBus
{
  void PushRequest1(Request1 r); <-- contains client id
}

class OutpuBus
{
  void PushReply1(Reply1 r)
}


// client (может быть много таких клиентов, у всех уникальный id в рамках процесса)
bus1.PushRequest1(clientId, r);

ClientHandler()
{
  bus1.SubscribeOnMessage(this, OnReply1)
}

ClientHandler::OnReply1(Reply1 r)
{
  //find by client id
  client->HandleReply1(r);
}

//logic thread
Logic()
{
  bus2.SubscribeOnMessage(this, OnRequest1);
}

Logic::OnRequest1(r1)
{
  //do something in this thread
  bus.SendReply1(clientId, reply);
}



могу попробовать переформулировать: есть два потока, которые общаются пересылкой сообщений, причем сообщения имеют два типа: request / reply
как построить взаимодействие на корутинах (с использованием всяких новых слов await/async/yield/resumable function)?
судя по https://blogs.msdn.microsoft.com/vcblog/2015/11/30/coroutines-in-visual-studio-2015-update-1/ , надо как-то определить методы await_ready / await_suspend / await_resume , но не знаю то ли это
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.