diff --git a/skylark-client.cabal b/skylark-client.cabal
--- a/skylark-client.cabal
+++ b/skylark-client.cabal
@@ -1,5 +1,5 @@
 name:                  skylark-client
-version:               0.1.2
+version:               0.1.3
 synopsis:              Skylark client.
 description:           Skylark network client.
 homepage:              https://github.com/githubuser/skylark-client#readme
diff --git a/src/Network/Skylark/Client.hs b/src/Network/Skylark/Client.hs
--- a/src/Network/Skylark/Client.hs
+++ b/src/Network/Skylark/Client.hs
@@ -4,6 +4,7 @@
 
 module Network.Skylark.Client
   ( runSkylark
+  , runSkylark'
   ) where
 
 import Control.Concurrent.Async.Lifted
@@ -56,7 +57,7 @@
     , requestBody = requestBodySourceChunked $ sourceTBQueue queue
     }
 
--- | Run Skylark client.
+-- | Run Skylark client with connections concurrent.
 --
 runSkylark :: MonadControl m => String -> ByteString -> Source m ByteString -> Sink ByteString m () -> m ()
 runSkylark url device source sink = do
@@ -67,3 +68,15 @@
   void $ concurrently
     (concurrently (download device manager request downQueue) (sourceTBQueue downQueue $$ sink))
     (concurrently (source $$ sinkTBQueue upQueue) (upload device manager request upQueue))
+
+-- | Run Skylark client with connections racing.
+--
+runSkylark' :: MonadControl m => String -> ByteString -> Source m ByteString -> Sink ByteString m () -> m ()
+runSkylark' url device source sink = do
+  manager   <- liftIO $ newManager tlsManagerSettings
+  request   <- parseRequest url
+  upQueue   <- liftIO $ atomically $ newTBQueue 8192
+  downQueue <- liftIO $ atomically $ newTBQueue 8192
+  race_
+    (race_ (download device manager request downQueue) (sourceTBQueue downQueue $$ sink))
+    (race_ (source $$ sinkTBQueue upQueue) (upload device manager request upQueue))
