c# - 我可以指定在 await continuation 完成后我希望保留哪些变量吗?

标签 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);

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

注意:这是一个人为的示例,但如果在下一个线程完成工作时不需要这些数据 block ,那么能够限制存储这些数据 block 似乎是有益的。

最佳答案

不,你不能。 (除了将它们拆分为单独的方法或将它们设置为 null 的明显解决方案之外)。

编译器在这种情况下没有完全优化;它可能捕获比它需要的更多的变量,并且可能比必要的更长时间地保留它们。这可能是微软 future 会优化的东西。

关于c# - 我可以指定在 await continuation 完成后我希望保留哪些变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18245949/

相关文章:

c# - LINQ 中的 SQL LIKE

c++ - Pthreads:为 pthread_cond_wait 使用 While 循环背后的逻辑

c# - 任务状态 :Waiting for activation -DownloadStringTaskAsync -WP8

c# - 使用 async 和 await 回调

c# - 在c#中通过颜色代码设置颜色

c# - DataGrid 自动生成的列 : Increasing width

c# - 在 C# 应用程序中隐藏命令窗口

c++ - 如果没有线程需要唤醒,是否需要获取锁并通知condition_variable?

c - OpenMP 线程处理的迭代索引

javascript - 返回 Promise 与等待这个 Promise