Currently, Cluster.Run is executed on a dedicated threads. This is not great for several reasons:
it's a inefficient use of resource, especially when the application is connected to many clusters
it involves extra context switches
when investigating thread pool starvation, a trace could show that Cluster.Run was the method that spent the most time blocking threads. After some time, you realize that it's a in dedicated thread so it can be ignored for the investigation.
What do you think about making the Aerospike client a good citizen by turning this code async and running it in the thread pool?
https://github.com/aerospike/aerospike-client-csharp/blob/ba6b5a6b422bc7b0992f9eeb761db94c8f2085ba/AerospikeClient/Cluster/Cluster.cs#L301
Currently, Cluster.Run is executed on a dedicated threads. This is not great for several reasons:
Cluster.Run
was the method that spent the most time blocking threads. After some time, you realize that it's a in dedicated thread so it can be ignored for the investigation.What do you think about making the Aerospike client a good citizen by turning this code async and running it in the thread pool?