2013-02-27 68 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之后到达第一行之后用过的。