Dostęp do usuwanych zamknięć - metody oznaczania jako bezpieczne
Chodzi o ostrzeżenie ReSharpera „Dostęp do rozmieszczonego zamknięcia”, które zwykle pojawia się, gdy obiekt, który jest później usuwany, jest używany w lambdzie.Dostęp do usuniętego zamknięcia w C #? omawia to bardziej szczegółowo.
Moje pytanie brzmi: W przypadku metod, które pobierają takie lamdby i wykonują je natychmiast (aby mieć pewność, że są one zawsze wykonywane przed usunięciem tego obiektu):
Czy istnieje sposób oznaczenia ich jako bezpiecznych, aby każdy kod korzystający z tej metody nie tworzył już tych ostrzeżeń?
Przykład:
using (var myObject = new MyDisposableObject())
{
DoThisTwice(() => myObject.DoSomething());
}
...
void DoThisTwice(Action do)
{
do();
do();
}
DoThisTwice pobiera delegata (lub lambda) i wykonuje go synchronicznie. Do czasu powrotu metody lambda nie będzie już wykonywana. Tylko wtedymyObject
jest usunięty, więc dobrze jest iść. Możemy oznaczyć wywołanie liniiDoThisTwice
z komentarzem, ale należy to zrobić we wszystkich miejscach, używając metody w podobny sposób. Zamiast tego chciałbym zaznaczyćDoThisTwice
tak bezpieczny, że Resharper nie wyświetla żadnych ostrzeżeń dla osób wywołujących metodę.