public static async Task<ReadResult> Read(this EventSocket eventSocket, string uuid, ReadOptions options)
        {
            try
            {
                // todo: what if applicationresult is null (hang up occurs before the application completes)
                var result = new ReadResult(
                    await eventSocket.ExecuteApplication(uuid, "read", options.ToString()).ConfigureAwait(false),
                    options.ChannelVariableName);

                if (!result.Success)
                {
                    LogFailedApplicationResult(eventSocket, result);
                }

                return result;
            }
            catch (TaskCanceledException ex)
            {
                return new ReadResult(null, null);
            }
        }
        public Task<ReadResult> Read(ReadOptions options)
        {
            if (!IsAnswered)
            {
                return Task.FromResult(new ReadResult(null, null));
            }

            return eventSocket.Read(UUID, options);
        }