// 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)); }
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); }
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); }