J'ai besoin d'un jeton d'authentification pour être thread et synchro. Le jeton expirera toutes les heures et il faudra donc en créer un nouveau et l'assigner à ma variable statique (TOKEN)Est-ce thread de code et de synchronisation en toute sécurité?
Est-ce que cela va faire l'affaire?
Merci,
public static volatile string TOKEN = string.Empty;
public static DateTime TOKEN_TIME = DateTime.Now;
private static readonly object syncRoot = new object();
public static string Get()
{
if (!string.IsNullOrEmpty(TOKEN))
{
if (!TokenIsValid())
{
lock(syncRoot)
TOKEN = CreateNewToken();
}
}
else
{
lock(syncRoot)
TOKEN = CreateNewToken();
}
return TOKEN;
}
Le même scénario peut se produire pour la branche 'if' également. Et comme une solution, je proposerais d'envelopper tout le corps 'Get()' avec un seul verrou. – zerkms
Un exemple de meilleure performance (tout en utilisant simplement 'lock') consiste à utiliser le double-verrouillage: http://en.wikipedia.org/wiki/Double-checked_locking. Lire à travers les mises en garde là, cependant. –