我可以指定在完成等待延续之后我想要保留哪些变量吗?

Kar*_*son 10 c# multithreading async-await c#-5.0

在一个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);
Run Code Online (Sandbox Code Playgroud)

所以我已经声明了7个局部变量,但是之后只使用其中的两个await,是否有任何属性我可以用我的变量来装饰,以表明我打算只使用firstNamecityawait完成之后?

注意:这是一个人为的例子,但是如果在下一个线程完成工作时不需要它们,那么能够抑制潜在大数据块的存储似乎是有益的.

Ste*_*ary 6

你不能.(除了明显的解决方案,将它们分成单独的方法或设置它们null).

在这种情况下,编译器未完全优化; 它可能捕获比它需要的更多的变量,并且可能会持续超过必要的时间.这可能是微软未来会优化的.