Just as a followup query: Are async Compute methods susceptible to a
similar issue, and should have the same treatment using a ContinueWith()?

Thanks,
Raymond.


On Thu, Mar 11, 2021 at 8:45 PM Raymond Wilson <raymond_wil...@trimble.com>
wrote:

> Hi Pavel,
>
> Thanks for the quick response.
>
> We have trialled the ContinueWith() suggestion which has resolved the
> issue in testing so far. I suspect this will have only a very minor
> performance impact.
>
> Thanks,
> Raymond.
>
>
> On Wed, Mar 10, 2021 at 10:33 PM Pavel Tupitsyn <ptupit...@apache.org>
> wrote:
>
>> Raymond,
>>
>> You are right, there is no efficient AND easy way to solve this.
>>
>> Basically, user code has to append ContinueWith to every async Ignite API
>> call manually:
>>
>>             await cache.GetAsync(1).ContinueWith(
>>                 t => t.Result,
>>                 CancellationToken.None,
>>                 TaskContinuationOptions.None,
>>                 TaskScheduler.Default);
>>
>> This will move the continuation to the thread pool only for Ignite calls,
>> where it is necessary.
>> An extension method can be cleaner, but this is still error-prone and
>> verbose.
>>
>>
>> There should be a global Ignite setting to move all async continuations
>> away from the striped pool.
>> I'm taking the ticket [1] ASAP, it is a shame that we let it sit for so
>> long.
>>
>> [1] https://issues.apache.org/jira/browse/IGNITE-12033
>>
>> On Wed, Mar 10, 2021 at 8:09 AM Raymond Wilson <
>> raymond_wil...@trimble.com> wrote:
>>
>>> Title correction: Async operations in IA C# client appear dangerous
>>>
>>>
>>> On Wed, Mar 10, 2021 at 6:05 PM Raymond Wilson <
>>> raymond_wil...@trimble.com> wrote:
>>>
>>>> We are using IA 2.8.1 with the C# client.
>>>>
>>>> After triaging intermittent critical thread blockages we determined we
>>>> have run into this problem reported back in 2019.
>>>>
>>>>
>>>> http://apache-ignite-users.70518.x6.nabble.com/Replace-or-Put-after-PutAsync-causes-Ignite-to-hang-td27871.html
>>>>
>>>> This thread contains suggestions about using
>>>> SetSynchronizationContext() in a single threaded context, and overriding a
>>>> method within it to direct all thread continuations into the .Net managed
>>>> thread pool to resolve the issue.
>>>>
>>>> WIthin that thread, this Jira ticket is created:
>>>> https://issues.apache.org/jira/browse/IGNITE-12033
>>>>
>>>> Reading into the ticket there does not seem to be a good approach
>>>> suggested to resolve this other than to use the public thread pool rather
>>>> than the striped thread pool for task continuations.
>>>>
>>>> None of the possible paths to solve this issue seem attractive for us:
>>>>
>>>> - We use a lot of concurrency (as I suspect every Ignite system would)
>>>> so the simple SynchronizationContext approach wont work.
>>>>
>>>> - Overriding all callbacks via the SynchronizationContext into the
>>>> managed thread pool not only imposes a performance penalty across the
>>>> application, but also may direct non-thread pool based threads executing
>>>> Ignite async operations into the managed thread pool after the async
>>>> operation has completed, which would have difficult to predict 
>>>> consequences.
>>>>
>>>> - Using .ConfigureAwait(true) [which may not be supported in .Net Core]
>>>> forces synchronization with the call thread, which may be a .Net managed
>>>> thread pool thread and so may not be available for some time.
>>>>
>>>> Initial experiments suggest the SynchronizationContext approach may not
>>>> work at all in our case with the override solution appearing to make the
>>>> problem worse.
>>>>
>>>> Given the current issues with async Cache operation should this be
>>>> deprecated in the C# client until the underlying issues are resolved? It is
>>>> hard to see how any non-trivial C# client based Ignite application can
>>>> safely use them.
>>>>
>>>> Regards,
>>>> Raymond.
>>>>
>>>> --
>>>> <http://www.trimble.com/>
>>>> Raymond Wilson
>>>> Solution Architect, Civil Construction Software Systems (CCSS)
>>>> 11 Birmingham Drive | Christchurch, New Zealand
>>>> raymond_wil...@trimble.com
>>>>
>>>>
>>>> <https://worksos.trimble.com/?utm_source=Trimble&utm_medium=emailsign&utm_campaign=Launch>
>>>>
>>>
>>>
>>> --
>>> <http://www.trimble.com/>
>>> Raymond Wilson
>>> Solution Architect, Civil Construction Software Systems (CCSS)
>>> 11 Birmingham Drive | Christchurch, New Zealand
>>> raymond_wil...@trimble.com
>>>
>>>
>>> <https://worksos.trimble.com/?utm_source=Trimble&utm_medium=emailsign&utm_campaign=Launch>
>>>
>>
>
> --
> <http://www.trimble.com/>
> Raymond Wilson
> Solution Architect, Civil Construction Software Systems (CCSS)
> 11 Birmingham Drive | Christchurch, New Zealand
> raymond_wil...@trimble.com
>
>
> <https://worksos.trimble.com/?utm_source=Trimble&utm_medium=emailsign&utm_campaign=Launch>
>


-- 
<http://www.trimble.com/>
Raymond Wilson
Solution Architect, Civil Construction Software Systems (CCSS)
11 Birmingham Drive | Christchurch, New Zealand
raymond_wil...@trimble.com

<https://worksos.trimble.com/?utm_source=Trimble&utm_medium=emailsign&utm_campaign=Launch>

Reply via email to