网上演练
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.6 KiB

#if FAT
namespace LinqInternal.Threading
{
/// <summary>
/// Provides a mechanism to get an object that represents a version of a mutable resource
/// </summary>
internal sealed partial class VersionProvider
{
private Target _target;
private Advancer _tryAdvance;
/// <summary>
/// Creates a new VersionProvider
/// </summary>
public VersionProvider()
{
_target = new Target(out _tryAdvance);
}
internal delegate bool Advancer(out long number);
/// <summary>
/// Advances the current up to date version
/// </summary>
public void Advance()
{
long number;
if (!_tryAdvance.Invoke(out number))
{
_target = new Target(out _tryAdvance);
}
}
/// <summary>
/// Advances the current up to date version and returns a VersionToken for the new version
/// </summary>
/// <returns>A VersionToken representing the advanced version</returns>
public VersionToken AdvanceNewToken()
{
long number;
if (!_tryAdvance.Invoke(out number))
{
_target = new Target(out _tryAdvance);
}
return new VersionToken(this, _target, number);
}
/// <summary>
/// Creates a new VersionToken, it should be considered to be out of date
/// </summary>
/// <returns>A new VersionToken</returns>
public VersionToken NewToken()
{
return new VersionToken(this);
}
}
}
#endif