﻿<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
  
  <head>
<!-- Yandex.Metrika counter -->
    <script type="text/javascript" >
      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
    
      ym(72949126, "init", {
           clickmap:true,
           trackLinks:true,
           accurateTrackBounce:true,
           webvisor:true
      });
    </script>
    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
    <!-- /Yandex.Metrika counter -->
<script type='text/javascript'>
    window.__lo_site_id = 284467;
    
      (function() {
        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
        })();
      </script>
<link rel="canonical" href="https://ignite.apache.org/releases/latest/dotnetdoc/api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html" />

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Class ComputeExecutionRejectedException
   | Apache Ignite.NET </title>
    <meta name="viewport" content="width=device-width">
    <meta name="title" content="Class ComputeExecutionRejectedException
   | Apache Ignite.NET ">
    <meta name="generator" content="docfx 2.24.0.0">
    
    <link rel="shortcut icon" href="../images/favicon.ico">
    <link rel="stylesheet" href="../styles/docfx.vendor.css">
    <link rel="stylesheet" href="../styles/docfx.css">
    <link rel="stylesheet" href="../styles/main.css">
    <meta property="docfx:navrel" content="../toc.html">
    <meta property="docfx:tocrel" content="toc.html">
    
    <meta property="docfx:rel" content="../">
    
  
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-61232409-1', 'auto');
  ga('send', 'pageview');

</script></head>
  <body data-spy="scroll" data-target="#affix">
    <div id="wrapper">
      <header>
        
        <nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              
              <a class="navbar-brand" href="../index.html">
                <img id="logo" class="svg" src="../images/logo_ignite_32_32.png" alt="">
              </a>
            </div>
            <div class="collapse navbar-collapse" id="navbar">
              <form class="navbar-form navbar-right" role="search" id="search">
                <div class="form-group">
                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
                </div>
              </form>
            </div>
          </div>
        </nav>
        
        <div class="subnav navbar navbar-default">
          <div class="container hide-when-search" id="breadcrumb">
            <ul class="breadcrumb">
              <li></li>
            </ul>
          </div>
        </div>
      </header>
      <div class="container body-content">
        
        <div id="search-results">
          <div class="search-list"></div>
          <div class="sr-items"></div>
          <ul id="pagination"></ul>
        </div>
      </div>
      <div role="main" class="container body-content hide-when-search">
        
        <div class="sidenav hide-when-search">
          <a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
          <div class="sidetoggle collapse" id="sidetoggle">
            <div id="sidetoc"></div>
          </div>
        </div>
        <div class="article row grid-right">
          <div class="col-md-10">
            <article class="content wrap" id="_content" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException">
  
  
  <h1 id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException" class="text-break">Class ComputeExecutionRejectedException
  </h1>
  <div class="markdown level0 summary"><p>Indicates a situation when execution service provided by the user in configuration rejects execution.</p>
</div>
  <div class="markdown level0 conceptual"></div>
  <div class="inheritance">
    <h5>Inheritance</h5>
    <div class="level0"><span class="xref">System.Object</span></div>
    <div class="level1"><span class="xref">System.Exception</span></div>
    <div class="level2"><a class="xref" href="Apache.Ignite.Core.Common.IgniteException.html">IgniteException</a></div>
    <div class="level3"><span class="xref">ComputeExecutionRejectedException</span></div>
  </div>
  <div classs="implements">
    <h5>Implements</h5>
    <div><span class="xref">System.Runtime.Serialization.ISerializable</span></div>
    <div><span class="xref">System.Runtime.InteropServices._Exception</span></div>
  </div>
  <div class="inheritedMembers">
    <h5>Inherited Members</h5>
    <div>
      <span class="xref">System.Exception.GetBaseException()</span>
    </div>
    <div>
      <span class="xref">System.Exception.ToString()</span>
    </div>
    <div>
      <span class="xref">System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)</span>
    </div>
    <div>
      <span class="xref">System.Exception.GetType()</span>
    </div>
    <div>
      <span class="xref">System.Exception.Message</span>
    </div>
    <div>
      <span class="xref">System.Exception.Data</span>
    </div>
    <div>
      <span class="xref">System.Exception.InnerException</span>
    </div>
    <div>
      <span class="xref">System.Exception.TargetSite</span>
    </div>
    <div>
      <span class="xref">System.Exception.StackTrace</span>
    </div>
    <div>
      <span class="xref">System.Exception.HelpLink</span>
    </div>
    <div>
      <span class="xref">System.Exception.Source</span>
    </div>
    <div>
      <span class="xref">System.Exception.HResult</span>
    </div>
    <div>
      <span class="xref">System.Exception.SerializeObjectState</span>
    </div>
    <div>
      <span class="xref">System.Object.Equals(System.Object)</span>
    </div>
    <div>
      <span class="xref">System.Object.Equals(System.Object, System.Object)</span>
    </div>
    <div>
      <span class="xref">System.Object.ReferenceEquals(System.Object, System.Object)</span>
    </div>
    <div>
      <span class="xref">System.Object.GetHashCode()</span>
    </div>
    <div>
      <span class="xref">System.Object.MemberwiseClone()</span>
    </div>
  </div>
  <h6><strong>Namespace</strong>: <a class="xref" href="Apache.Ignite.Core.Compute.html">Apache.Ignite.Core.Compute</a></h6>
  <h6><strong>Assembly</strong>: Apache.Ignite.Core.dll</h6>
  <h5 id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException_syntax">Syntax</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">[Serializable]
public class ComputeExecutionRejectedException : IgniteException, ISerializable, _Exception</code></pre>
  </div>
  <h3 id="constructors">Constructors
  </h3>
  <a id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor_" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor*"></a>
  <h4 id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor">ComputeExecutionRejectedException()</h4>
  <div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html">ComputeExecutionRejectedException</a> class.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public ComputeExecutionRejectedException()</code></pre>
  </div>
  <a id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor_" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor*"></a>
  <h4 id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor_System_Runtime_Serialization_SerializationInfo_System_Runtime_Serialization_StreamingContext_" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">ComputeExecutionRejectedException(SerializationInfo, StreamingContext)</h4>
  <div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html">ComputeExecutionRejectedException</a> class.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">protected ComputeExecutionRejectedException(SerializationInfo info, StreamingContext ctx)</code></pre>
  </div>
  <h5 class="parameters">Parameters</h5>
  <table class="table table-bordered table-striped table-condensed">
    <thead>
      <tr>
        <th>Type</th>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><span class="xref">System.Runtime.Serialization.SerializationInfo</span></td>
        <td><span class="parametername">info</span></td>
        <td><p>Serialization information.</p>
</td>
      </tr>
      <tr>
        <td><span class="xref">System.Runtime.Serialization.StreamingContext</span></td>
        <td><span class="parametername">ctx</span></td>
        <td><p>Streaming context.</p>
</td>
      </tr>
    </tbody>
  </table>
  <a id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor_" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor*"></a>
  <h4 id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor_System_String_" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor(System.String)">ComputeExecutionRejectedException(String)</h4>
  <div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html">ComputeExecutionRejectedException</a> class.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public ComputeExecutionRejectedException(string message)</code></pre>
  </div>
  <h5 class="parameters">Parameters</h5>
  <table class="table table-bordered table-striped table-condensed">
    <thead>
      <tr>
        <th>Type</th>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><span class="xref">System.String</span></td>
        <td><span class="parametername">message</span></td>
        <td><p>The message that describes the error.</p>
</td>
      </tr>
    </tbody>
  </table>
  <a id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor_" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor*"></a>
  <h4 id="Apache_Ignite_Core_Compute_ComputeExecutionRejectedException__ctor_System_String_System_Exception_" data-uid="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.#ctor(System.String,System.Exception)">ComputeExecutionRejectedException(String, Exception)</h4>
  <div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html">ComputeExecutionRejectedException</a> class.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public ComputeExecutionRejectedException(string message, Exception cause)</code></pre>
  </div>
  <h5 class="parameters">Parameters</h5>
  <table class="table table-bordered table-striped table-condensed">
    <thead>
      <tr>
        <th>Type</th>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><span class="xref">System.String</span></td>
        <td><span class="parametername">message</span></td>
        <td><p>The message.</p>
</td>
      </tr>
      <tr>
        <td><span class="xref">System.Exception</span></td>
        <td><span class="parametername">cause</span></td>
        <td><p>The cause.</p>
</td>
      </tr>
    </tbody>
  </table>
  <h3 id="implements">Implements</h3>
  <div>
      <span class="xref">System.Runtime.Serialization.ISerializable</span>
  </div>
  <div>
      <span class="xref">System.Runtime.InteropServices._Exception</span>
  </div>
</article>
          </div>
          
          <div class="hidden-sm col-md-2" role="complementary">
            <div class="sideaffix">
              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
              <!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
              </nav>
            </div>
          </div>
        </div>
      </div>
      
      <footer>
        <div class="grad-bottom"></div>
        <div class="footer">
          <div class="container">
            <span class="pull-right">
              <a href="#top">Back to top</a>
            </span>
            © 2015 - 2019 The Apache Software Foundation
            
          </div>
        </div>
      </footer>
    </div>
    
    <script type="text/javascript" src="../styles/docfx.vendor.js"></script>
    <script type="text/javascript" src="../styles/docfx.js"></script>
    <script type="text/javascript" src="../styles/main.js"></script>
  </body>
</html>
