private async Task CommunicationThreadImpl()
    {
        await appUpdater.Start();

        try
        {
            foreach (var message in messageQueue.GetConsumingEnumerable(cancellationToken))
            {
                this.appUpdater.Update((dynamic)message);
            }
        }
        catch (OperationCanceledException)
        {
            Debug.Log("Communication thread was cancelled.");
        }
        catch (ThreadAbortException ex)
        {
            Debug.Log($"The thread has been aborted: {ex}");
        }
        catch (Exception ex)
        {
            Debug.LogError(ex);
        }
    }