Я недавно играл с новым async CTP, и я столкнулся с ситуацией, когда Я не уверен, как продолжить.
В моей текущей кодовой основе я использую концепцию «рабочих мест» и «менеджер рабочих мест». Джобс существует исключительно с целью обращения с первоначальным сообщением, отправляя ответ, а затем ждать ответа.
У меня уже есть существующий код, основанный на синхронных сокетах, где сетевая нить ждет приход к данным, а затем передавать его к обработчику события и в конечном итоге для менеджера заданий.
Менеджер рабочих мест ищет какую работу будет обработать сообщение и проходит его вместе.
Таким образом, сценарий это:
Вот пример псевдокода:
class MyJob : Job
{
public override void RunJob( IPacketMsg packet )
{
// handle packet
var myReply = new Packet();
SendReply( myReply );
await GetResponse();
}
}
, но я не совсем уверен, как продолжить на шаге 3. Диспетчер рабочих мест получит ответ, а затем передать его на работу. Но я не уверен, как сделать работу дождаться ответа.
Я подумал, создавая ожидаемую задачу, которая просто блокирует на Waithandle, но это лучшее решение?
Есть ли другие вещи, которые я мог сделать в этом случае?
Редактировать На тему ASYNC CTP, что происходит в ситуации, когда UI не используется. Я прочитал над Async async Eric Lippert, но я не верю, что это когда-либо затронуло тему, как все работает на заднем плане без пользовательского пользовательского интерфейса (выходит ли это на фоне рабочего тела или ...?) [?)