2013-02-27 12 views
7

Mam wersję PRO. 4.5 4.5, która używa funkcji async/await.Nie można sprawdzić zmiennych podczas debugowania funkcji .NET Async/Await

Kiedy próbuję sprawdzać/quickwatch zmienną referencyjną po instrukcji czekają, pojawia się następujący:

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

wiedzieć jak to naprawić, więc można go debugować?

Edit-- Oto kod

[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

Kiedy próbujesz sprawdzić identyfikator? Czy naprawdę jest po linii 'var id ...'? –

+0

Rzeczywiście jest to - dzieje się to w całym moim kodzie wszędzie, jest to bardzo uproszczona wersja kodu, w której również się dzieje. Mam nadzieję, że uzyskanie wyjaśnienia, dlaczego tak się dzieje w mikro, kończy się również informacją, dlaczego tak się dzieje w makro – Micah

+0

To działa dla mnie. Stworzyłem superpoślizgową implementację. 'var id = czeka na Task.Factory.StartNew (() => {System.Threading.Thread.Sleep (1000), return 1;}); return id;' –

Odpowiedz

-2

To zmienna jeszcze nie istnieje, więc nie ma sposobu, aby sprawdzić jego wartość. Nie ma żadnej wartości (jeszcze).

Nie będzie on zdefiniowany technicznie, dopóki nie dojdziesz do linii kodu, która go definiuje, i nie będzie miała wartości, dopóki go nie zainicjujesz. Chociaż można technicznie sprawdzić wartość zmiennej przed jej przypisaniem w niektórych przypadkach, nigdy nie można uzyskać dostępu do tej wartości w kodzie (poza niebezpiecznym kodem), więc nie ma powodu, aby na nią patrzeć.

Co do tego, kiedy zostanie przydzielona pamięć dla tej lokalizacji (wtedy, gdy po raz pierwszy masz możliwość podglądania jej w debugerze), po osiągnięciu pierwszej linii po ostatniej await zanim zmienna zostanie używany.

Powiązane problemy