Ejemplo n.º 1
0
        // TODO: understand what this does, and document
        //
        // documentation says that... "execute processes ..., blocking until the processing is
        // complete and the result is returned" and "submit processes ... and provides a way to
        // register a callback to receive notifications about the result of the entry processing".
        //
        // in the original code, "execute" returns a value whereas "submit" returns a task that
        // can be awaited - but since we are fully async now, all our code now returns tasks.
        //
        // however, "execute" uses MapExecuteOnKeyCodec (77312 // 0x012E00) whereas "submit" uses
        // MapSubmitToKeyCodec (77568 // 0x012F00) which is a different codec

        protected virtual async Task <object> ApplyAsync(IData processorData, IData keyData, CancellationToken cancellationToken)
        {
            var requestMessage  = MapSubmitToKeyCodec.EncodeRequest(Name, processorData, keyData, ContextId);
            var responseMessage = await Cluster.Messaging.SendToKeyPartitionOwnerAsync(requestMessage, keyData, cancellationToken).CAF();

            var response = MapSubmitToKeyCodec.DecodeResponse(responseMessage).Response;

            return(ToObject <object>(response));
        }
Ejemplo n.º 2
0
        protected virtual Task <object> SubmitToKeyInternal(IData keyData, IEntryProcessor entryProcessor)
        {
            var request      = MapSubmitToKeyCodec.EncodeRequest(Name, ToData(entryProcessor), keyData, GetThreadId());
            var responseTask = InvokeAsync(request, keyData, m =>
            {
                var response = MapSubmitToKeyCodec.DecodeResponse(m).Response;
                return(ToObject <object>(response));
            });

            return(responseTask);
        }
Ejemplo n.º 3
0
        public Task <object> SubmitToKey(TKey key, IEntryProcessor entryProcessor)
        {
            ThrowExceptionIfNull(key);
            var keyData = ToData(key);

            InvalidateNearCacheEntry(keyData);
            var request = MapSubmitToKeyCodec.EncodeRequest(GetName(), ToData(entryProcessor), keyData,
                                                            ThreadUtil.GetThreadId());
            var responseTask = InvokeAsync(request, keyData, m =>
            {
                var response = MapSubmitToKeyCodec.DecodeResponse(m).response;
                return(ToObject <object>(response));
            });

            return(responseTask);
        }