<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to run an asynchronous gp service from ArcGIS Pro SDK? in ArcGIS Pro SDK Questions</title>
    <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777869#M958</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks that is helpful, the Pro SDK documentation is a little confusing to navigate&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 10 Apr 2020 13:32:33 GMT</pubDate>
    <dc:creator>JamesGough</dc:creator>
    <dc:date>2020-04-10T13:32:33Z</dc:date>
    <item>
      <title>How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777865#M954</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am new to the ArcGIS Pro SDK. I am attempting to run a Python toolbox tool that I published to ArcGIS Server as a GPServer. The task is asynchronous (&lt;SPAN style="color: #000000; background-color: #ffffff; font-size: 14.4px;"&gt;esriExecutionTypeAsynchronous). &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; background-color: #ffffff; font-size: 14.4px;"&gt;I have tried running the tool using&amp;nbsp;&lt;/SPAN&gt;&lt;EM style="background-color: #ffffff; color: #000000; font-size: 14.4px; "&gt;await Geoprocessing.ExecuteToolAsync()&lt;/EM&gt;&lt;SPAN style="color: #000000; background-color: #ffffff; font-size: 14.4px;"&gt;, this successfully submits the job, and the job is successful. However, my code does not actually wait until the job finishes. It just submits it, and then continues.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is there way to submit a job and check its status until completion using the Geoprocessing namespace or any other function in the SDK? Or do I just need to do this using the ArcGIS Server REST API?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The gist of my code:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;protected&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;override&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;async&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;OnClick&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
   &lt;SPAN class="comment token"&gt;// Setup Progress dialog&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;var&lt;/SPAN&gt; progDlg &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;new&lt;/SPAN&gt; &lt;SPAN class="token class-name"&gt;ProgressDialog&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Running Tool"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"Cancel"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;100&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;true&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   progDlg&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;Show&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;var&lt;/SPAN&gt; progSrc &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;new&lt;/SPAN&gt; &lt;SPAN class="token class-name"&gt;CancelableProgressorSource&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;progDlg&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="comment token"&gt;// Tool parameters&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;string&lt;/SPAN&gt; tool_path &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;@"path to my tool on server using a .ags file"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;string&lt;/SPAN&gt; flags_fc &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;@"path to a feature class"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;string&lt;/SPAN&gt; barriers_fc &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;@"path to a feature class"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;string&lt;/SPAN&gt; skip_locations &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;@"path to a feature class"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;var&lt;/SPAN&gt; parameters &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; Geoprocessing&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;MakeValueArray&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;flags_fc&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; barriers_fc&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; skip_locations&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="comment token"&gt;// Run the Tool&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;var&lt;/SPAN&gt; result &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;await&lt;/SPAN&gt; Geoprocessing&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;ExecuteToolAsync&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;tool_path&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; parameters&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;null&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;new&lt;/SPAN&gt; 
       &lt;SPAN class="token class-name"&gt;CancelableProgressorSource&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;progDlg&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;Progressor&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; GPExecuteToolFlags&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;Default&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   progDlg&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;Hide&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   Geoprocessing&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;ShowMessageBox&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;result&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;Messages&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"GP Messages"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; result&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;IsFailed &lt;SPAN class="operator token"&gt;?&lt;/SPAN&gt; 
   GPMessageBoxStyle&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;Error &lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; GPMessageBoxStyle&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;Default&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;James&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 08:45:09 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777865#M954</guid>
      <dc:creator>JamesGough</dc:creator>
      <dc:date>2021-12-12T08:45:09Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777866#M955</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi James,&lt;/P&gt;&lt;P&gt;Have you tried like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var parameters = Geoprocessing.MakeValueArray(fullSpec, fieldName);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var cts = new CancellationTokenSource();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var results = Geoprocessing.ExecuteToolAsync("management.DeleteField", parameters, null, cts.Token,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (eventName, o) =&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Diagnostics.Debug.WriteLine($@"GP event: {eventName}");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (eventName == "OnMessage")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Diagnostics.Debug.WriteLine($@"Msg: {o}");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;If you want to wait until your job finishes you can do like this:&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var parameters = Geoprocessing.MakeValueArray(sInputPath);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var gpResult = Geoprocessing.ExecuteToolAsync("Delete_management", parameters, null, CancelableProgressor.None,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPExecuteToolFlags.None);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpResult.Wait();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return !gpResult.Result.IsFailed;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A class="link-titled" href="https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.wait?view=netframework-4.8" title="https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.wait?view=netframework-4.8"&gt;Task.Wait Method (System.Threading.Tasks) | Microsoft Docs&lt;/A&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Or you can combine both.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Apr 2020 06:21:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777866#M955</guid>
      <dc:creator>GKmieliauskas</dc:creator>
      <dc:date>2020-04-10T06:21:01Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777867#M956</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&amp;nbsp;Gintautas,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for the response!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So if I understand, the first option you showed uses a callback function that should be called when the job finishes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The second option uses the Task.Wait method to wait until the task finishes. Is this blocking or does it automatically spawn a new thread?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thanks,&lt;/P&gt;&lt;P&gt;James&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Apr 2020 13:05:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777867#M956</guid>
      <dc:creator>JamesGough</dc:creator>
      <dc:date>2020-04-10T13:05:14Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777868#M957</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI James,&lt;/P&gt;&lt;P&gt;More info about first option:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic9391.html" title="https://pro.arcgis.com/en/pro-app/sdk/api-reference/#topic9391.html"&gt;ArcGIS Pro 2.5 API Reference Guide&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Apr 2020 13:29:25 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777868#M957</guid>
      <dc:creator>GKmieliauskas</dc:creator>
      <dc:date>2020-04-10T13:29:25Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777869#M958</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks that is helpful, the Pro SDK documentation is a little confusing to navigate&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Apr 2020 13:32:33 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777869#M958</guid>
      <dc:creator>JamesGough</dc:creator>
      <dc:date>2020-04-10T13:32:33Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777870#M959</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The&amp;nbsp;GPToolExecuteEventHandler Delegate options seems to be working, thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Apr 2020 19:50:48 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/777870#M959</guid>
      <dc:creator>JamesGough</dc:creator>
      <dc:date>2020-04-10T19:50:48Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/1264011#M9503</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/119731"&gt;@JamesGough&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Could you share how your code looked after implementing the solution?&lt;/P&gt;</description>
      <pubDate>Fri, 03 Mar 2023 15:36:24 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/1264011#M9503</guid>
      <dc:creator>Flayner</dc:creator>
      <dc:date>2023-03-03T15:36:24Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/1264025#M9505</link>
      <description>&lt;P&gt;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/663256"&gt;@Flayner&lt;/a&gt;This was quite a while ago, but i think this is the right code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using ArcGIS.Core.CIM;
using ArcGIS.Core.Data;
using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Catalog;
using ArcGIS.Desktop.Core;
using ArcGIS.Desktop.Core.Geoprocessing;
using ArcGIS.Desktop.Editing;
using ArcGIS.Desktop.Extensions;
using ArcGIS.Desktop.Framework;
using ArcGIS.Desktop.Framework.Contracts;
using ArcGIS.Desktop.Framework.Dialogs;
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Mapping;
using Newtonsoft.Json;

namespace DAC_Calculator
{
    internal class RunGpTool : Button
    {
        protected override async void OnClick()
        {
            // Tool parameters
            // Use .ags file to connect to arcgis server
            var projectHomeFolder = Project.Current.HomeFolderPath;
            var projGDBPath = Project.Current.DefaultGeodatabasePath;

            var featureClassNames = Module1.Current.DACInputFcNames;
            string tool_path = projectHomeFolder + @"\site.ags\DACTest/DACTrace2\DACTrace";
            string flags_fc = projGDBPath + @"\" + featureClassNames[0];
            string barriers_fc = projGDBPath + @"\" + featureClassNames[1];
            string skip_locations = projGDBPath + @"\" + featureClassNames[2];
            var parameters = Geoprocessing.MakeValueArray(flags_fc, barriers_fc, skip_locations);

            foreach(string name in featureClassNames)
            {
                // Check that feature class exists
                if (!await Module1.FeatureClassExistsAsync(name))
                {
                    // if not, create it
                    await Module1.CreateFeatureClass(name, Module1.EnumFeatureClassType.POINT);
                }
            }

            // Set up progress dialog
            ProgressDialog progDialog = new ProgressDialog("Running DAC", false);
            var status = new ProgressorSource(progDialog);
            progDialog.Show();

            // run tool with callback
            var cts = new CancellationTokenSource();
            var results = Geoprocessing.ExecuteToolAsync(tool_path, parameters, null, cts.Token,
                async (eventName, o) =&amp;gt;  // implement delegate and handle events, o is message object.
                {
                    System.Diagnostics.Debug.WriteLine($@"GP event: {eventName}");
                    if (eventName == "OnMessage")
                    {
                        System.Diagnostics.Debug.WriteLine($@"Msg: {o}");
                    }

                    switch (eventName)
                    {
                        case "OnValidate": // stop execute if any warnings
                            if ((o as IGPMessage[]).Any(it =&amp;gt; it.Type == GPMessageType.Warning))
                                cts.Cancel();
                            break;

                        case "OnProgressMessage":
                            if ((o as string) == "Updating...")
                            {
                                status.Progressor.Message = "Job Completed, Updating Map...";
                            }
                            else
                            {
                                string msg = string.Format("{0}: {1}", new object[] { eventName, (string)o });
                                System.Windows.MessageBox.Show(msg);
                            }
                            cts.Cancel();
                            break;

                        case "OnProgressPos":
                            string msg2 = string.Format("{0}: {1} %", new object[] { eventName, (int)o });
                            System.Windows.MessageBox.Show(msg2);
                            cts.Cancel();
                            break;

                        case "OnMessage":
                            IGPMessage msg3 = o as IGPMessage;
                            string messageText = msg3.Text;
                            // MessageBox.Show(messageText, "DAC Tool");
                            switch (messageText)
                            {
                                case "Submitted.":
                                    status.Progressor.Message = "Job Submitted to server.";
                                    break;

                                case "Executing...":
                                    status.Progressor.Message = "Job executing on server...";
                                    break;
                            }
                            break;

                        case "OnBeginExecute":
                            // MessageBox.Show("Beginning Execution", "DAC Tool");
                            break;

                        case "OnEndExecute":
                            progDialog.Hide();


                            IGPResult res = o as IGPResult;
                            // IGPResult.Parameters contains all tool parameters (both input and output)
                                // Tuple.Item1 - name
                                // Tuple.Item2 - datatype
                                // Tuple.Item3 - value
                                // Tuple.Item4 - input = true, output = false
                            var toolParams = res.Parameters;

                            if (toolParams == null)
                            {
                                MessageBox.Show("No Results Found");
                                return;
                            }

                            // string to store dac results json string
                            string dac_results = "";
                            // List to store layer names and paths of output feature classes
                            var outputFeatureClasses = new List&amp;lt;(string Name, string Path)&amp;gt;();
                            // Loop through the parameters
                            foreach (var p in toolParams)
                            {
                                // if it is an output parameter of type DEFeatureClass
                                if (p.Item4 == false &amp;amp;&amp;amp; p.Item2 == "DEFeatureClass")
                                {
                                    // add to the outPutFeatureClasses
                                    outputFeatureClasses.Add((p.Item1, p.Item3));
                                }

                                // Set the dac_results string when we find the dac_results parameter
                                if (p.Item1 == "dac_results")
                                {
                                    dac_results = p.Item3;
                                }
                            }
                            
                            // Deserialize JSON dac results to DACData object
                            if (dac_results != "")
                            {
                                // Deserialize the json string into a DACData object
                                DACData dac = JsonConvert.DeserializeObject&amp;lt;DACData&amp;gt;(dac_results);

                                // Update dac data results on Module1
                                Module1.Current.ResultsData = dac;
                            }

                            // Select results
                            var manholeOutput = outputFeatureClasses.Where((l) =&amp;gt; l.Name == Module1.ManholeFeatureClassName).FirstOrDefault();
                            await Module1.SelectResultsFeatures(manholeOutput.Path, Module1.ManholeFeatureClassName, Module1.ManholeIdField);

                            var gravPipeOutput = outputFeatureClasses.Where((l) =&amp;gt; l.Name == Module1.GravityPipesFeatureClassName).FirstOrDefault();
                            await Module1.SelectResultsFeatures(gravPipeOutput.Path, Module1.GravityPipesFeatureClassName, Module1.GravityPipesIdField);

                            var presPipeOutput = outputFeatureClasses.Where((l) =&amp;gt; l.Name == Module1.PressurePipesFeatureClassName).FirstOrDefault();
                            await Module1.SelectResultsFeatures(presPipeOutput.Path, Module1.PressurePipesFeatureClassName, Module1.PressurePipesIdField);

                            // delete output feature classes
                            foreach (var (Name, Path) in outputFeatureClasses)
                            {
                                await Module1.DeleteFeatureClass(Path);
                            }

                            // Call cleanup function
                            Module1.DoPostGpCleanUp();

                            break;
                    }
                }, GPExecuteToolFlags.None);
        }
    }
}&lt;/LI-CODE&gt;</description>
      <pubDate>Fri, 03 Mar 2023 16:07:25 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/1264025#M9505</guid>
      <dc:creator>JamesGough</dc:creator>
      <dc:date>2023-03-03T16:07:25Z</dc:date>
    </item>
    <item>
      <title>Re: How to run an asynchronous gp service from ArcGIS Pro SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/1264136#M9506</link>
      <description>&lt;P&gt;Tks&amp;nbsp;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/119731"&gt;@JamesGough&lt;/a&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 03 Mar 2023 19:46:32 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-run-an-asynchronous-gp-service-from-arcgis/m-p/1264136#M9506</guid>
      <dc:creator>Flayner</dc:creator>
      <dc:date>2023-03-03T19:46:32Z</dc:date>
    </item>
  </channel>
</rss>

