THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block | ||
---|---|---|
| ||
IgniteFuture fut = cache.putAsync(1, 1); fut.listen(f -> { // Executes on Striped pool and causes a deadlockdeadlocks. cache.replace(1, 2); }); |
Users are supposed to be aware of this and handle it manually, however:
...
Code Block | ||
---|---|---|
| ||
await cache.PutAsync(1, 1); // Now we are on a Striped pool thread! // CPU-heavy method blocks the stripe and cache ops are stalled. RunSomething(); |
A similar problem exists for Compute. Async operation continuations are executed on the Public pool, which can lead to starvation there when all threads are taken up by continuation logic.
...