title: django.channels async consumer does not appear to execute asynchronously
body: <p>I have added django.channels to a django project in order to support long running processes that notify users of progress via websockets.</p>
  
  <p>Everything appears to work fine except for the fact that the implementation of the long running process doesn't seem to respond asynchronously.</p>
  
  <p>For testing I have created an <code>AsyncConsumer</code> that recognizes two types of messages 'run' and 'isBusy'.</p>
  
  <p>The 'run' message handler sets a 'busy flag' sends back a 'process is running' message, waits <strong>asynchronously</strong> for 20 seconds resets the 'busy flag' and then sends back a 'process complete message'</p>
  
  <p>The 'isBusy' message returns a message with the status of the busy flag.</p>
  
  <p>My expectation is that if I send a run message I will receive immediately a 'process is running' message back and after 20 seconds I will receive a 'process complete' message. 
  This works as expected.</p>
  
  <p>I also expect that if I send a 'isBusy' message I will receive immediately a response with the state of the flag.</p>
  
  <p>The observed behaviour is as follows:</p>
  
  <ul>
  <li>a message 'run' is sent (from the client)</li>
  <li>a message 'running please wait' is immediately received</li>
  <li>a message 'isBusy' is sent (from the client)</li>
  <li>the message reaches the  web socket listener on the server side</li>
  <li><strong>nothing happens</strong> until the run handler finishes</li>
  <li>a 'finished running' message is received on the client</li>
  <li>followed immediately by a 'process isBusy:False' message </li>
  </ul>
  
  <p>Here is the implementation of the Channel listener:</p>
  
  <pre class="lang-py prettyprint-override"><code>class BackgroundConsoleConsumer(AsyncConsumer):
      def __init__(self, scope):
          super().__init__(scope)
          self.busy = False
  
      async def run(self, message):
          print("run got message", message)
          self.busy = True
          await self.channel_layer.group_send('consoleChannel',{
                      "type":"consoleResponse",
                      "text":"running please wait"
                  })
          await asyncio.sleep(20)
          self.busy = False
          await self.channel_layer.group_send('consoleChannel',{
                      "type":"consoleResponse",
                      "text": "finished running"
                  })
  
      async def isBusy(self,message):
          print('isBusy got message', message)
          await self.channel_layer.group_send('consoleChannel',{
                      "type":"consoleResponse",
                      "text":  "process isBusy:{0}".format(self.busy)
                  })
  </code></pre>
  
  <p>The channel is set up in the routing file as follows:</p>
  
  <pre class="lang-py prettyprint-override"><code>application = ProtocolTypeRouter({
      "websocket": AuthMiddlewareStack(
          URLRouter([
              url("^console/$", ConsoleConsumer),
          ])
  
      ),
      "channel": ChannelNameRouter({
          "background-console":BackgroundConsoleConsumer,
      }),
  })
  </code></pre>
  
  <p>I run the channel with one worker (via ./manage.py runworker ).</p>
  
  <p>The experiment was done with the django test server (via runserver).</p>
  
  <p>Any ideas as to why the  channel consumer does not appear to work asynchronously would be appreciated.</p>