Rozważmy następujący kod:Jak zdobyć cel słabego odniesienia w sposób bezpieczny
var weakRef = new WeakReference(new StringBuilder("Mehran"));
if (weakRef.IsAlive)
{
// Garbage Collection might happen.
Console.WriteLine((weakRef.Target as StringBuilder).ToString());
}
To możliwe GC.Collect
uruchomić po sprawdzeniu weakRef.IsAlive
i przed użyciem weakRef.Target
.
Czy jestem w tym zły? Jeśli to możliwe, czy istnieje bezpieczny sposób, aby to zrobić?
Na przykład odpowiedni byłby interfejs API taki jak weakRef.GetTargetIfIsAlive()
.
Zapoznaj się z http://msdn.microsoft.com/en-gb/library/ms404247.aspx –
Najpierw należy przesłać silne odwołanie, a następnie sprawdzić wartość "null". W żaden sposób nie możesz zagwarantować, że twoje silne referencje nie będą wcześniej puste. –