private static async void SendOrEnqueue(AsyncIOState data)
{
var count = Math.Min(ChunkLength, data.Remaining);
if (data.RateLimiter == null || data.RateLimiter.TryProcess(1))
{
try
{
data.Transferred = await data.Connection.SendAsync(data.Buffer, data.Offset, count);
FinishSend(data);
}
catch
{
data.Callback(false, 0, data.State);
TransferCache.Enqueue(data);
}
}
else
{
SendQueue.Enqueue(data);
}
}
}