本文整理汇总了C#中CacheEntry.GetMessage方法的典型用法代码示例。如果您正苦于以下问题:C# CacheEntry.GetMessage方法的具体用法?C# CacheEntry.GetMessage怎么用?C# CacheEntry.GetMessage使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CacheEntry
的用法示例。
在下文中一共展示了CacheEntry.GetMessage方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetValue
public QualityMessage GetValue(SolutionMessage message, Evaluator evaluate, ExtensionRegistry extensions) {
var entry = new CacheEntry(message.ToString());
bool lockTaken = false;
bool waited = false;
try {
Monitor.Enter(cacheLock, ref lockTaken);
while (true) {
LinkedListNode<CacheEntry> node;
if (index.TryGetValue(entry, out node)) {
list.Remove(node);
list.AddLast(node);
Hits++;
lockTaken = false;
Monitor.Exit(cacheLock);
OnChanged();
return node.Value.GetMessage(extensions);
} else {
if (!waited && activeEvaluations.Contains(entry.Key)) {
while (activeEvaluations.Contains(entry.Key))
Monitor.Wait(cacheLock);
waited = true;
} else {
activeEvaluations.Add(entry.Key);
lockTaken = false;
Monitor.Exit(cacheLock);
OnChanged();
try {
entry.SetMessage(evaluate(message));
Monitor.Enter(cacheLock, ref lockTaken);
index[entry] = list.AddLast(entry);
Trim();
} finally {
if (!lockTaken)
Monitor.Enter(cacheLock, ref lockTaken);
activeEvaluations.Remove(entry.Key);
Monitor.PulseAll(cacheLock);
lockTaken = false;
Monitor.Exit(cacheLock);
}
OnChanged();
return entry.GetMessage(extensions);
}
}
}
} finally {
if (lockTaken)
Monitor.Exit(cacheLock);
}
}