Какой лучший способ дождаться до сети пакет с использованием новой асинхронизации C #

Я недавно играл с новым async CTP, и я столкнулся с ситуацией, когда Я не уверен, как продолжить.

В моей текущей кодовой основе я использую концепцию «рабочих мест» и «менеджер рабочих мест». Джобс существует исключительно с целью обращения с первоначальным сообщением, отправляя ответ, а затем ждать ответа.

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

Менеджер рабочих мест ищет какую работу будет обработать сообщение и проходит его вместе.

Таким образом, сценарий это:

  1. Менеджер рабочих мест получает новое сообщение и запускает работу.
  2. Работа начинается, обрабатывает сообщение и отправляет ответное сообщение.
  3. На данный момент работа будет дождаться ответа на ответ.

Вот пример псевдокода:

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, но я не верю, что это когда-либо затронуло тему, как все работает на заднем плане без пользовательского пользовательского интерфейса (выходит ли это на фоне рабочего тела или ...?) [?)

6
задан Ryan Stecker 12 September 2011 в 20:00
поделиться