| <!doctype html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <!-- Always force latest IE rendering engine or request Chrome Frame --> |
| <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"> |
| |
| |
| <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,300italic,400italic,400,600' rel='stylesheet' type='text/css'> |
| <!-- Use title if it's in the page YAML frontmatter --> |
| <title> |
| Function Execution | |
| Geode Native .NET Docs |
| </title> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <link href="/stylesheets/all.css" rel="stylesheet" media="screen, print" /> |
| <link href="/stylesheets/print.css" rel="stylesheet" media="print" /> |
| <link href='/images/favicon.ico' rel='shortcut icon'> |
| |
| <script src="/javascripts/all.js"></script> |
| |
| </head> |
| |
| <body class="docs docs_geode-native docs_geode-native_dotnet docs_geode-native_dotnet_113 docs_geode-native_dotnet_113_function-execution has-subnav"> |
| |
| <div class="viewport"> |
| <div class='wrap'> |
| <script type="text/javascript"> |
| document.domain = "apache.org"; |
| </script> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <header class="header header-layout"> |
| <h1 class="logo"> |
| <a href="/"> |
| <img src="/images/Apache_Geode_logo_symbol_white.png" style="width:30px;"> |
| Apache Geode Native .NET Documentation |
| </a> |
| </h1> |
| <div class="header-links js-bar-links"> |
| <div class="btn-menu" data-behavior="MenuMobile"></div> |
| <div class="header-item"><a href="http://geode.apache.org">Back to Product Page</a></div> |
| <div class="header-item"> |
| <a href="http://geode.apache.org/community" target="_blank">Community</a> |
| </div> |
| </div> |
| </header> |
| |
| |
| <div class="container"> |
| |
| <!--googleoff: index--> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <div id="sub-nav" class="js-sidenav nav-container" role="navigation"> |
| <a class="sidenav-title" data-behavior="SubMenuMobile">Doc Index</a> |
| <div class="nav-content"> |
| <ul> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/about-client-users-guide.html">Apache Geode Native Documentation</a> |
| </li> |
| <li class="has_submenu"> |
| <a href="/docs/geode-native/dotnet/113/getting-started/getting-started-nc-client.html">Getting Started with the Native Library</a> |
| <ul> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/getting-started/getting-started-nc-client.html#set_up_dev_environment">Set Up Your Development Environment</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/getting-started/getting-started-nc-client.html#establish_cluster_access">Establish Access to a Geode Cluster</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/getting-started/getting-started-nc-client.html#app_dev_walkthroughs">Application Development Walkthroughs</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/getting-started/getting-started-nc-client.html#programming_examples">Programming Examples</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/getting-started/put-get-example.html">Put/Get/Remove Examples</a> |
| </li> |
| </ul> |
| </li> |
| <li class="has_submenu"> |
| <a href="/docs/geode-native/dotnet/113/configuring/configuration.html">Configuring a Client Application</a> |
| <ul> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/configuring/system-level-configuration.html">System Level Configuration</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li> |
| <a href="/docs/geode-native/dotnet/113/configuring/config-client-cache.html">Configuring the Client Cache</a> |
| </li> |
| <li class="has_submenu"> |
| <a href="/docs/geode-native/dotnet/113/regions/regions.html">Configuring Regions</a> |
| <ul> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/regions/registering-interest-for-entries.html">Registering Interest for Entries</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/regions/region-attributes.html">Region Attributes</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li class="has_submenu"> |
| <a href="/docs/geode-native/dotnet/113/serialization/data-serialization.html">Serializing Data</a> |
| <ul> |
| <li class="has_submenu"> |
| <a href="/docs/geode-native/dotnet/113/serialization/dotnet-serialization/dotnet-pdx-serialization.html">Geode PDX Serialization</a> |
| <ul> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/serialization/dotnet-serialization/dotnet-pdx-autoserializer.html">Using the Geode PDX Autoserializer</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/serialization/dotnet-serialization/serialize-using-ipdxserializable.html">Using the IPdxSerializable Interface</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/serialization/dotnet-serialization/pdx-serializable-examples.html">IPdxSerializable Examples</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| |
| <li> |
| <a href="/docs/geode-native/dotnet/113/remote-queries.html">Remote Queries</a> |
| </li> |
| |
| <li> |
| <a href="/docs/geode-native/dotnet/113/continuous-queries.html">Continuous Queries</a> |
| </li> |
| |
| <li class="has_submenu"> |
| <a href="/docs/geode-native/dotnet/113/security/security.html">Security: Authentication and Encryption</a> |
| <ul> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/security/authentication.html">Authentication</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/security/sslclientserver.html">TLS/SSL Client-Server Communication Encryption</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li> |
| <a href="/docs/geode-native/dotnet/113/function-execution.html">Function Execution</a> |
| </li> |
| |
| <li> |
| <a href="/docs/geode-native/dotnet/113/transactions.html">Transactions</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/configuring/sysprops.html">System Properties</a> |
| </li> |
| <li> |
| <a href="/docs/geode-native/dotnet/113/client-cache-ref.html">Client Cache XML Reference</a> |
| </li> |
| </ul> |
| </div> |
| </div> |
| |
| <!--googleon: index--> |
| |
| <main class="content content-layout" id="js-content" role="main"> |
| <a id="top"></a> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <span style="font-weight:200;font-size:31px;" style="float:left;"> |
| <img src="/images/Apache_Geode_logo_symbol.png" style="height:26px;"> |
| Apache Geode Native .NET |
| </span> |
| <span class="local-header version-info" style="float:right;"> |
| <a href="https://cwiki.apache.org/confluence/display/GEODE/Release+Notes">CHANGELOG</a> |
| </span> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <h1 class="title-container" > |
| Function Execution |
| </h1> |
| |
| <div id="js-quick-links" > |
| <div class="quick-links"><ul> |
| <li><a href="#nc-fe-server_side_requirements">Server-side Requirements</a></li> |
| <li><a href="#nc-fe-client_side_requirements">Client-side Requirements</a></li> |
| <li><a href="#nc-fe-how_functions_execute">How Functions Execute</a></li> |
| <li><a href="#nc-fe-processing_function_results">Processing Function Results</a></li> |
| <li> |
| <a href="#nc-fe-examples">Function Execution Example</a><ul><li><a href="#nc-fe-dotnet_example">.NET Example</a></li></ul> |
| </li> |
| </ul></div> |
| </div> |
| <div class="to-top" id="js-to-top"> |
| <a href="#top" title="back to top"></a> |
| </div> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p>A client can invoke a server-resident function, with parameters, and can collect and operate on the returned results.</p> |
| |
| <h2 id="server-side-requirements"><a id="nc-fe-server_side_requirements"></a>Server-side Requirements</h2> |
| |
| <p>To be callable from your client, a function must be </p> |
| |
| <ul> |
| <li>resident on the server, and</li> |
| <li>registered as available for client access.</li> |
| </ul> |
| |
| <p>See <a href="serverman/developing/function_exec/function_execution.html">Executing a Function in Apache Geode</a> |
| in the Geode User Guide for details on how to write and register server-resident functions.</p> |
| |
| <h2 id="client-side-requirements"><a id="nc-fe-client_side_requirements"></a>Client-side Requirements</h2> |
| |
| <p>The client must connect to the server through a connection pool in order to invoke a server-side function.</p> |
| |
| <h2 id="how-functions-execute"><a id="nc-fe-how_functions_execute"></a>How Functions Execute</h2> |
| |
| <ol> |
| <li> The calling client application runs the <code>execute</code> method on the <code>Execution</code> object. The function must already be registered on the servers.</li> |
| <li> The function is invoked on the servers where it needs to run. The servers are determined by the <code>FunctionService on*</code> |
| method calls, region configuration, and any filters.</li> |
| <li> If the function has results, the result is returned in a <code>ResultCollector</code> object.</li> |
| <li> The client collects results using the <code>ResultCollector.getResult()</code> method.</li> |
| </ol> |
| |
| <p>In every client where you want to execute the function and process the results:</p> |
| |
| <ul> |
| <li>Use one of the <code>FunctionService on*</code> methods to create an <code>Execution</code> object. The <code>on*</code> methods, |
| <code>onRegion</code>, <code>onServer</code> and <code>onServers</code>, define the highest level where the function is run.</li> |
| <li>If you use <code>onRegion</code> you can further narrow your run scope by setting key filters.</li> |
| <li>A function run using <code>onRegion</code> is a <em>data dependent</em> function – others are <em>data-independent</em> functions.</li> |
| <li><p>You can run a data dependent function against partitioned and colocated partitioned regions. From the client, provide the appropriate key |
| sets to the function call.</p></li> |
| <li><p>The <code>Execution</code> object allows you to customize the invocation by:</p> |
| |
| <ul> |
| <li> Providing a set of data keys to <code>withFilter</code> to narrow the execution scope. This works only for <code>onRegion</code> Execution objects (data-dependent functions).</li> |
| <li> Providing function arguments to <code>withArgs</code>.</li> |
| <li> Defining a custom <code>ResultCollector</code> for <code>withCollector</code>.</li> |
| </ul></li> |
| <li><p>Call the <code>Execution.execute()</code> method to run the function.</p></li> |
| </ul> |
| |
| <h2 id="processing-function-results"><a id="nc-fe-processing_function_results"></a>Processing Function Results</h2> |
| |
| <p>To get the results from the function in the client app, use the result collector returned from the function execution. |
| The <code>getResult</code> methods of the default result collector block until all results are received, then return the full result set.</p> |
| |
| <p>The client can use the default result collector. If the client needs special results handling, code a custom <code>ResultsCollector</code> implementation to replace the default. |
| Use the <code>Execution::withCollector</code> method to specify the custom collector. |
| To handle the results in a custom manner:</p> |
| |
| <ol> |
| <li> Write a class that implements the <code>ResultCollector</code> interface to handle the results in a custom manner. The methods are of two types: one handles data and information from Geode and populates the results set, while the other returns the compiled results to the calling application: |
| |
| <ul> |
| <li> <code>addResult</code> is called when results arrive from the <code>Function</code> methods. Use <code>addResult</code> to add a single result to the ResultCollector.</li> |
| <li> <code>endResults</code> is called to signal the end of all results from the function execution.</li> |
| <li> <code>getResult</code> is available to your executing application (the one that calls <code>Execution.execute</code>) to retrieve the results. This may block until all results are available.</li> |
| <li> <code>clearResults</code> is called to clear partial results from the results collector. This is used only for highly available <code>onRegion</code> functions where the calling application waits for the results. If the call fails, before Geode retries the execution, it calls <code>clearResults</code> to ready the instance for a clean set of results.</li> |
| </ul></li> |
| <li> Use the <code>Execution</code> object in your executing member to call <code>withCollector</code>, passing your custom collector.</li> |
| </ol> |
| |
| <h2 id="function-execution-example"><a id="nc-fe-examples"></a>Function Execution Example</h2> |
| |
| <p>The native client release contains an example of function execution in <code>../examples/dotnet/functionexecution</code>.</p> |
| |
| <ul> |
| <li>The example begins with a server-side script that runs <code>gfsh</code> commands to create a region, simply called “partition_region”.</li> |
| <li>The function is preloaded with a JAR file containing the server-side Java function code. </li> |
| <li>The function, called “ExampleMultiGetFunction”, is defined in the |
| <code>examples/utilities</code> directory of your distribution. As its input parameter, the function takes an array of keys, |
| then performs a <code>get</code> on each key and returns an array containing the results.</li> |
| <li>The function does not load values into the data store. That is a separate operation, performed in these examples by |
| the client, and does not involve the server-side function.</li> |
| </ul> |
| |
| <p>As prerequisites, the client code must be aware of the connection to the server, the name of the function, and the expected type/format |
| of the input parameter and return value.</p> |
| |
| <p>The client:</p> |
| |
| <ul> |
| <li>creates an execution object</li> |
| <li>provides the execution object with a populated input parameter array</li> |
| <li>invokes the object’s execute method to invoke the server-side function</li> |
| </ul> |
| |
| <p>If the client expects results, it must create a result object. |
| The .NET example uses a built-in result collector (<code>IResultCollector.getResults()</code>) to retrieve the function results.</p> |
| |
| <h3 id=".net-example"><a id="nc-fe-dotnet_example"></a>.NET Example</h3> |
| |
| <p>This section contains code snippets showing highlights of the .NET function execution example. They are not intended for cut-and-paste execution. |
| For the complete source, see the example source directory.</p> |
| |
| <p>The .NET example creates a cache, then uses it to create a connection pool.</p> |
| <pre class="highlight csharp"><code> <span class="kt">var</span> <span class="n">cacheFactory</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">CacheFactory</span><span class="p">()</span> |
| <span class="p">.</span><span class="nf">Set</span><span class="p">(</span><span class="s">"log-level"</span><span class="p">,</span> <span class="s">"none"</span><span class="p">);</span> |
| <span class="kt">var</span> <span class="n">cache</span> <span class="p">=</span> <span class="n">cacheFactory</span><span class="p">.</span><span class="nf">Create</span><span class="p">();</span> |
| |
| <span class="kt">var</span> <span class="n">poolFactory</span> <span class="p">=</span> <span class="n">cache</span><span class="p">.</span><span class="nf">GetPoolFactory</span><span class="p">()</span> |
| <span class="p">.</span><span class="nf">AddLocator</span><span class="p">(</span><span class="s">"localhost"</span><span class="p">,</span> <span class="m">10334</span><span class="p">);</span> |
| <span class="kt">var</span> <span class="n">pool</span> <span class="p">=</span> <span class="n">poolFactory</span><span class="p">.</span><span class="nf">Create</span><span class="p">(</span><span class="s">"pool"</span><span class="p">);</span> |
| </code></pre> |
| |
| <p>The example uses the connection pool to create a region, with the same characteristics and name as the server-side region (<code>partition_region</code>).</p> |
| <pre class="highlight csharp"><code> <span class="kt">var</span> <span class="n">regionFactory</span> <span class="p">=</span> <span class="n">cache</span><span class="p">.</span><span class="nf">CreateRegionFactory</span><span class="p">(</span><span class="n">RegionShortcut</span><span class="p">.</span><span class="n">PROXY</span><span class="p">)</span> |
| <span class="p">.</span><span class="nf">SetPoolName</span><span class="p">(</span><span class="s">"pool"</span><span class="p">);</span> |
| <span class="kt">var</span> <span class="n">region</span> <span class="p">=</span> <span class="n">regionFactory</span><span class="p">.</span><span class="n">Create</span><span class="p"><</span><span class="kt">object</span><span class="p">,</span> <span class="kt">object</span><span class="p">>(</span><span class="s">"partition_region"</span><span class="p">);</span> |
| </code></pre> |
| |
| <p>The sample client populates the server’s datastore with values, using the API and some sample key-value pairs.</p> |
| <pre class="highlight csharp"><code> <span class="kt">string</span> <span class="n">rtimmonsKey</span> <span class="p">=</span> <span class="s">"rtimmons"</span><span class="p">;</span> |
| <span class="kt">string</span> <span class="n">rtimmonsValue</span> <span class="p">=</span> <span class="s">"Robert Timmons"</span><span class="p">;</span> |
| <span class="kt">string</span> <span class="n">scharlesKey</span> <span class="p">=</span> <span class="s">"scharles"</span><span class="p">;</span> |
| <span class="kt">string</span> <span class="n">scharlesValue</span> <span class="p">=</span> <span class="s">"Sylvia Charles"</span><span class="p">;</span> |
| <span class="n">region</span><span class="p">.</span><span class="nf">Put</span><span class="p">(</span><span class="n">rtimmonsKey</span><span class="p">,</span> <span class="n">rtimmonsValue</span><span class="p">,</span> <span class="k">null</span><span class="p">);</span> |
| <span class="n">region</span><span class="p">.</span><span class="nf">Put</span><span class="p">(</span><span class="n">scharlesKey</span><span class="p">,</span> <span class="n">scharlesValue</span><span class="p">,</span> <span class="k">null</span><span class="p">);</span> |
| </code></pre> |
| |
| <p>To confirm that the data has been stored, the client uses the API to retrieve the values and write them to the console. |
| This is done without reference to the server-side example function.</p> |
| <pre class="highlight csharp"><code> <span class="kt">var</span> <span class="n">user1</span> <span class="p">=</span> <span class="n">region</span><span class="p">.</span><span class="nf">Get</span><span class="p">(</span><span class="n">rtimmonsKey</span><span class="p">,</span> <span class="k">null</span><span class="p">);</span> |
| <span class="kt">var</span> <span class="n">user2</span> <span class="p">=</span> <span class="n">region</span><span class="p">.</span><span class="nf">Get</span><span class="p">(</span><span class="n">scharlesKey</span><span class="p">,</span> <span class="k">null</span><span class="p">);</span> |
| |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="n">rtimmonsKey</span> <span class="p">+</span> <span class="s">" = "</span> <span class="p">+</span> <span class="n">user1</span><span class="p">);</span> |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="n">scharlesKey</span> <span class="p">+</span> <span class="s">" = "</span> <span class="p">+</span> <span class="n">user2</span><span class="p">);</span> |
| </code></pre> |
| |
| <p>Next, the client retrieves those same values using the server-side example function. |
| The client code creates the input parameter, an array of keys whose values are to be retrieved.</p> |
| <pre class="highlight csharp"><code> <span class="n">ArrayList</span> <span class="n">keyArgs</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">ArrayList</span><span class="p">();</span> |
| <span class="n">keyArgs</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="n">rtimmonsKey</span><span class="p">);</span> |
| <span class="n">keyArgs</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="n">scharlesKey</span><span class="p">);</span> |
| </code></pre> |
| |
| <p>The client creates an execution object using <code>Client.FunctionService.OnRegion</code> and specifying the region.</p> |
| <pre class="highlight csharp"><code> <span class="kt">var</span> <span class="n">exc</span> <span class="p">=</span> <span class="n">Client</span><span class="p">.</span><span class="n">FunctionService</span><span class="p"><</span><span class="kt">object</span><span class="p">>.</span><span class="n">OnRegion</span><span class="p"><</span><span class="kt">object</span><span class="p">,</span> <span class="kt">object</span><span class="p">>(</span><span class="n">region</span><span class="p">);</span> |
| </code></pre> |
| |
| <p>The client then calls the server side function with its input arguments and stores the results in a Client.IResultCollector.</p> |
| <pre class="highlight csharp"><code> <span class="n">Client</span><span class="p">.</span><span class="n">IResultCollector</span><span class="p"><</span><span class="kt">object</span><span class="p">></span> <span class="n">rc</span> <span class="p">=</span> <span class="n">exc</span><span class="p">.</span><span class="n">WithArgs</span><span class="p"><</span><span class="kt">object</span><span class="p">>(</span><span class="n">keyArgs</span><span class="p">).</span><span class="nf">Execute</span><span class="p">(</span><span class="s">"ExampleMultiGetFunction"</span><span class="p">);</span> |
| </code></pre> |
| |
| <p>It then loops through the results and prints the retrieved values.</p> |
| <pre class="highlight csharp"><code> <span class="n">ICollection</span><span class="p"><</span><span class="kt">object</span><span class="p">></span> <span class="n">res</span> <span class="p">=</span> <span class="n">rc</span><span class="p">.</span><span class="nf">GetResult</span><span class="p">();</span> |
| |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="s">"Function Execution Results:"</span><span class="p">);</span> |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="s">" Count = {0}"</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">Count</span><span class="p">);</span> |
| |
| <span class="k">foreach</span> <span class="p">(</span><span class="n">List</span><span class="p"><</span><span class="kt">object</span><span class="p">></span> <span class="n">item</span> <span class="k">in</span> <span class="n">res</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">foreach</span> <span class="p">(</span><span class="kt">object</span> <span class="n">item2</span> <span class="k">in</span> <span class="n">item</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="s">" value = {0}"</span><span class="p">,</span> <span class="n">item2</span><span class="p">.</span><span class="nf">ToString</span><span class="p">());</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| </code></pre> |
| |
| |
| |
| </main> |
| </div> |
| </div> |
| </div> |
| |
| <div id="scrim"></div> |
| |
| <div class="container"> |
| <footer class="site-footer-links"> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <div class="copyright"> |
| <a href='/'>Apache Geode Documentation</a> |
| © 2020 <a href='http://www.apache.org/'>The Apache Software Foundation</a>. |
| </div> |
| <div class="support"> |
| Need help? <a href="http://geode.apache.org/community" target="_blank">Visit the Community</a> |
| </div> |
| |
| </footer> |
| </div><!--end of container--> |
| |
| </body> |
| </html> |