Warum sollte / finally anstelle einer using-Anweisung helfen, eine Race-Bedingung zu vermeiden?

Diese Frage bezieht sich auf einen Kommentar in einem anderen Beitrag hier:Abbrechen einer Entity Framework-Abfrage

Ich werde das Codebeispiel aus Gründen der Klarheit von dort reproduzieren:

    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();

Ich kann den Kommentar, der sagt, nicht verstehen

Nicht verwenden, da dies zu Rennstörungen führen kann

entities ist eine lokale Variable und wird nicht freigegeben, wenn der Code in einem anderen Thread erneut eingegeben wird. Innerhalb desselben Threads scheint es absolut sicher (und in der Tat äquivalent zum angegebenen Code), ihn in einer using-Anweisung in zuzuweisen auf die übliche Art und Weise, anstatt die Dinge manuell mit dem try / finally zu erledigen. Kann mich jemand aufklären?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage