async void OnJudgerStatusUpdateMessage(string clientId, ClientStatusMsg msg)
 {
     using (await queueLock.LockAsync()) {
         // should we dispatch a new job for this judger?
         var remainingDispatches = msg.RequestForNewTask;
         using (await connectionLock.LockAsync()) {
             if (connections.TryGetValue(clientId, out var conn))
             {
                 conn.CanAcceptNewTask = msg.CanAcceptNewTask;
                 conn.ActiveTaskCount  = msg.ActiveTaskCount;
                 while (remainingDispatches > 0)
                 {
                     if (await TryDispatchJobFromDatabase(conn))
                     {
                         remainingDispatches--;
                     }
                     else
                     {
                         break;
                     }
                 }
             }
         }
         for (ulong i = 0; i < remainingDispatches; i++)
         {
             JudgerQueue.AddLast(clientId);
         }
         logger.LogInformation("Status::Judger: {0}", DEBUG_LogEnumerator(JudgerQueue));
     }
 }
 /// <summary>
 /// Process a <c>ClientStatusMsg</c>. This function is present only for
 /// compatibility reasons.
 /// </summary>
 /// <param name="clientId"></param>
 /// <param name="msg"></param>
 /// <returns></returns>
 async void OnJudgerStatusUpdateMessage(string clientId, ClientStatusMsg msg)
 {
     using (await connectionLock.LockAsync()) {
         if (connections.TryGetValue(clientId, out var conn))
         {
             conn.CanAcceptNewTask = msg.CanAcceptNewTask;
             conn.ActiveTaskCount  = msg.ActiveTaskCount;
         }
     }
 }