You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
66
mcs/class/referencesource/System.Workflow.Runtime/DbRetry.cs
Normal file
66
mcs/class/referencesource/System.Workflow.Runtime/DbRetry.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace System.Workflow.Runtime
|
||||
{
|
||||
internal class DbRetry
|
||||
{
|
||||
private const short _defaultMaxRetries = 20;
|
||||
private const int _defaultRetrySleep = 2000;
|
||||
private const short _spinCount = 3;
|
||||
|
||||
private short _maxRetries = _defaultMaxRetries;
|
||||
private int _retrySleep = _defaultRetrySleep;
|
||||
private bool _enableRetries = false;
|
||||
|
||||
protected DbRetry()
|
||||
{
|
||||
}
|
||||
|
||||
internal DbRetry(bool enableRetries)
|
||||
{
|
||||
_enableRetries = enableRetries;
|
||||
}
|
||||
|
||||
internal short MaxRetries
|
||||
{
|
||||
get { return _maxRetries; }
|
||||
}
|
||||
|
||||
internal bool TryDoRetry(ref short retryCount)
|
||||
{
|
||||
if (CanRetry(retryCount++))
|
||||
{
|
||||
RetrySleep(retryCount);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
internal bool CanRetry(short retryCount)
|
||||
{
|
||||
if (!_enableRetries)
|
||||
return false;
|
||||
|
||||
if (retryCount < _maxRetries)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
internal void RetrySleep(short retryCount)
|
||||
{
|
||||
//
|
||||
// For the first couple of retries just spin
|
||||
// If we fail _spinCount times start then introduce a sleep
|
||||
if (retryCount <= _spinCount)
|
||||
return;
|
||||
|
||||
int sleep = _retrySleep * retryCount;
|
||||
Thread.Sleep(sleep);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user