2013-02-27 7 views
7

Ich habe ein .NET 4.5 Projekt, das async/await Funktionalität verwendet.Variablen beim Debuggen von .NET-Async-/Wartefunktionen nicht prüfen

Wenn ich versuche, eine variable Referenz nach einer await Anweisung zu inspizieren/Schnellüberwachung, erhalte ich die folgende:

The name 'id' does not exist in the current context

wissen, wie das so beheben ich es debuggen kann?

Edit-- Hier ist der Code

[Fact] 
    public async Task works_as_expected() 
    { 
     var repo = Config.Ioc.GetInstance<IAsyncRepository<Customer>>(); 

     var work = Config.Ioc.GetInstance<IUnitOfWork>(); 
     Customer c= new Customer() 
     { 
      FirstName = "__Micah", 
      LastName = "__Smith_test", 
      DateCreated = DateTime.Now, 
      DateModified = DateTime.Now, 
      Email = "[email protected]", 
      Phone = "7245551212" 
     }; 

     var id=await repo.Insert(c); 
     // i can't inspect the value of id 
     Assert.True(id > 0); 
    } 
+0

Wann versuchen Sie ID zu inspizieren? Ist es wirklich nach der Zeile "var id ..."? –

+0

Tatsächlich ist dies etwas, das überall in meinem Code überall passiert, das ist nur eine sehr vereinfachte Code-Version, wo es auch passiert. Ich hoffe, dass eine Erklärung dafür, warum es im Mikro passiert, am Ende auch mir sagen wird, warum es im Makro passiert. – Micah

+0

Das funktioniert für mich. Ich habe eine super dumme Down-Implementierung erstellt. 'var id = await Aufgabe.Factory.StartNew (() => {System.Threading.Thread.Sleep (1000); return 1;}); return id;' –

Antwort

-2

Diese Variable noch nicht existiert, so gibt es keine Möglichkeit, es ist Wert zu überprüfen. Es hat (noch) keinen Wert.

Es wird technisch nicht definiert, bis Sie die Codezeile erreichen, die es definiert, und es wird keinen Wert haben, bis Sie es initialisieren. Während Sie den Wert einer Variablen in einigen Fällen technisch überprüfen können, bevor dieser überhaupt zugewiesen wird, kann auf diesen Wert niemals im Code zugegriffen werden (außerhalb des unsicheren Codes), so dass es keinen Grund gibt, ihn zu betrachten.

Wenn der Speicher für diesen Speicherort zugewiesen wird (das ist, wenn Sie zuerst die Möglichkeit haben, im Debugger zu suchen), nachdem Sie die erste Zeile nach dem letzten await vor der Variablen erreicht haben benutzt.

Verwandte Themen