Dlaczego warto spróbować / w końcu, a nie „używać” oświadczenia, aby uniknąć sytuacji wyścigu?

To pytanie dotyczy komentarza w innym wpisie tutaj:Anulowanie kwerendy Framework Entity

Będę odtworzyć przykład kodu z jasności:

    var thread = new Thread((param) =>
    {
        var currentString = param as string;

        if (currentString == null)
        {
            // TODO OMG exception
            throw new Exception();
        }

        AdventureWorks2008R2Entities entities = null;
        try // Don't use using because it can cause race condition
        {
            entities = new AdventureWorks2008R2Entities();

            ObjectQuery<Person> query = entities.People
                .Include("Password")
                .Include("PersonPhone")
                .Include("EmailAddress")
                .Include("BusinessEntity")
                .Include("BusinessEntityContact");
            // Improves performance of readonly query where
            // objects do not have to be tracked by context
            // Edit: But it doesn't work for this query because of includes
            // query.MergeOption = MergeOption.NoTracking;

            foreach (var record in query 
                .Where(p => p.LastName.StartsWith(currentString)))
            {
                // TODO fill some buffer and invoke UI update
            }
        }
        finally
        {
            if (entities != null)
            {
                entities.Dispose();
            }
        }
    });

thread.Start("P");
// Just for test
Thread.Sleep(500);
thread.Abort();

Nie mogę zrozumieć komentarza, który mówi

Nie używaj go, ponieważ może to spowodować stan wyścigu

entities jest zmienną lokalną i nie zostanie udostępniona, jeśli kod zostanie ponownie wprowadzony w innym wątku iw tym samym wątku wydaje się całkowicie bezpieczne (a nawet równoważne podanemu kodowi) przypisanie go do instrukcji „używanie” w zwykły sposób, zamiast robienia rzeczy ręcznie za pomocą try / Wreszcie. Czy ktoś może mnie oświecić?

questionAnswers(4)

yourAnswerToTheQuestion