2013-02-27 47 views
7

我有一個使用async/await功能的.NET 4.5 proj。調試.NET異步/等待函數時無法檢查變量

當我嘗試檢查/快速監視一個的await語句後變量引用,我得到以下幾點:

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

知道如何解決這個問題,所以我可以調試呢?

Edit--這裏的代碼

[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

你什麼時候想檢查ID?它真的在'var id ...'行後面嗎? – 2013-02-27 15:51:42

+0

確實是這樣 - 這是遍及我的所有代碼的事情,這只是一個非常簡化的代碼版本,它也會發生。我希望得到一個解釋,爲什麼它發生在微觀將最終也告訴我爲什麼它發生在宏 – Micah 2013-02-27 15:54:15

+0

這對我有用。我創建了一個超級笨拙的實現。 'var id = await Task.Factory.StartNew (()=> {System.Threading.Thread.Sleep(1000); return 1;}); return id;' – 2013-02-27 16:09:35

回答

-2

該變量尚不存在,所以沒有辦法檢查它的價值。它沒有價值(還)。

在技術上它不會被定義,除非您到達定義它的代碼行,並且在初始化它之前它不會有任何值。儘管在某些情況下您可以在技術上檢查變量的值,但在某些情況下永遠不能訪問該變量的值(在不安全的代碼之外),因此幾乎沒有理由查看它。

至於何時該位置的內存將被分配(這是當你第一次有選擇在調試器中查看它),這將是在變量之前的最後一個await之後到達第一行之後用過的。