c# – 垃圾收集器是否在.NET中异步调用期间暂时删除未引用的对象
发布时间:2020-12-15 04:24:16 所属栏目:百科 来源:网络整理
导读:想象一下,我将在.NET中进行异步调用,即HttpWebRequest.BeginGetResponse,并且HttpWebRequest对象在更广泛的范围内不被引用.垃圾收集器会毁灭它并造成问题吗? 示例代码: using System;using System.Net;public class AsyncHttpWebRequest{ void Main() { va
想象一下,我将在.NET中进行异步调用,即HttpWebRequest.BeginGetResponse,并且HttpWebRequest对象在更广泛的范围内不被引用.垃圾收集器会毁灭它并造成问题吗?
示例代码: using System; using System.Net; public class AsyncHttpWebRequest { void Main() { var Request = HttpWebRequest.Create("http://www.contoso.com"); var result = Request.BeginGetResponse(GetResponseCallback,null); } private void GetResponseCallback(IAsyncResult AsyncResult) { // Do Something.. } } 备用版本(请求作为AsyncState传递): using System; using System.Net; public class AsyncHttpWebRequest { void Main() { var Request = HttpWebRequest.Create("http://www.contoso.com"); var result = Request.BeginGetResponse(GetResponseCallback,Request); } private void GetResponseCallback(IAsyncResult AsyncResult) { // Do Something.. } } 解决方法
如果任何活动线程包含对其的引用,或者静态引用(在这两种情况下都是直接或间接引用),则该对象被认为是活动的且不符合垃圾回收的条件.
在这两个示例中,async API保留对您的请求的引用(在提供异步IO操作的线程池中),因此在完成之前不会垃圾回收. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容