在 async
方法中,任何局部变量都被存储起来,以便在 await
之后继续执行的任何线程都可以访问这些值。在 await
之后有什么方法可以指示真正需要哪些值?
例如:
var firstName = "Karl";
var lastName = "Anderson";
var street1 = "123 Nowhere Street";
var street2 = "Apt 1-A";
var city = "Beverly Hills";
var state = "California";
var zip = "90210";
await MyTaskHere();
Console.WriteLine(firstName);
Console.WriteLine(city);
所以我已经声明了 7 个局部变量,但在 await
之后只使用了其中的 2 个,是否有任何属性可以用来装饰我的变量以表明我打算只使用 firstName
和 city
在 await
完成后?
注意:这是一个人为的示例,但如果在下一个线程完成工作时不需要这些数据 block ,那么能够限制存储这些数据 block 似乎是有益的。
最佳答案
不,你不能。 (除了将它们拆分为单独的方法或将它们设置为 null
的明显解决方案之外)。
编译器在这种情况下没有完全优化;它可能捕获比它需要的更多的变量,并且可能比必要的更长时间地保留它们。这可能是微软 future 会优化的东西。
关于c# - 我可以指定在 await continuation 完成后我希望保留哪些变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18245949/