我很想知道在调用异步方法时如何管理任务的生命周期 并存储在局部变量中返回的任务。考虑一下这段代码
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
是一个局部变量,一旦方法退出,它就可以在任务完成之前很久就可用于垃圾收集。确保不发生这种情况的机制是什么?
答案 0 :(得分:3)
无论DownloadStringTaskAsync
正在做什么,在稍后的某个时间点,它必须能够为它返回的Result
设置Task
,并将其标记为完成。因此,逻辑上,它也必须引用此Task
对象(引用可以通过引用链或它可以是直接引用)
答案 1 :(得分:0)
基本上,有一个线程正在运行
运行线程不是gc'ed
(如果是这种情况,垃圾收集器
可以在任何时候结束你的主要)