gpt4 book ai didi

c# - 本地任务如何在完成之前避免垃圾收集

转载 作者:行者123 更新时间:2023-11-30 20:51:50 26 4
gpt4 key购买 nike

我有兴趣知道调用异步方法时任务的生命周期是如何管理的并将返回的任务存储在局部变量中。考虑这段代码

public partial class Form1 : Form
{
public Form1()
{
this.InitializeComponent();
}

private void loadButton_Click(object sender, EventArgs e)
{
var client = new WebClient();

var task = client.DownloadStringTaskAsync(new Uri(@"http:\\www.rpmglobal.com"));
task.ContinueWith(t =>
{
try
{
this.textBox.Text = t.Result;
}
catch (AggregateException ex)
{
this.textBox.Text = "ERROR: " + ex.InnerException.Message;
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
}

变量 task 是一个局部变量,一旦方法退出就应该可以用于垃圾回收,这可能比任务完成早很久。确保这种情况不会发生的机制是什么?

最佳答案

无论 DownloadStringTaskAsync 正在做什么,在稍后的某个时间点,它都必须能够为它的 Task 设置 Result返回,并将其标记为完成。因此,从逻辑上讲,它也必须引用此 Task 对象(引用可以通过引用链进行,也可以是直接引用)

关于c# - 本地任务如何在完成之前避免垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21372867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com