gpt4 book ai didi

c# - 委托(delegate)多线程 EndInvoke?

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:14 26 4
gpt4 key购买 nike

我的 .aspx 文件中的这个方法...

   private static string GetPageAsString(string address)
{
AsyncWebRequester.StartRequest(address);
TimeSpan timeout = new TimeSpan(1000000); // 1 second=10,000,000
DateTime tryToGetAnswerUntil = DateTime.Now.Add(timeout);
string returnXML = "";
while (string.IsNullOrEmpty(returnXML) && DateTime.Now < tryToGetAnswerUntil )
{
returnXML = AsyncWebRequester.GetResult(address);
}
return returnXML;
}

访问这个类中的方法...

public class AsyncWebRequester
{
private static Dictionary<string, string> retrievedxml = new Dictionary<string, string>();

public static void StartRequest(string uri)
{
try
{
InitiateAsyncRequestDelegate mydelegate = new InitiateAsyncRequestDelegate(InitiateAsyncRequest);
mydelegate.BeginInvoke(uri, null, null);
}
catch {}
}

private delegate void InitiateAsyncRequestDelegate(string uri);

private static void InitiateAsyncRequest(string uri)
{
WebRequest request;
try
{
request = WebRequest.Create(uri);

using (WebResponse response = request.GetResponse())
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string result = reader.ReadToEnd();
retrievedxml.Add(uri, result);
}
}
catch { }
finally { request = null; }
}

public static string GetResult(string uri)
{
string xml = "";
if (retrievedxml.ContainsKey(uri))
{
xml = retrievedxml[uri];
retrievedxml.Remove(uri);
}
return xml;
}

}

基本上这意味着:触发并忘记某些线程以从网站请求 xml。如果我从站点返回 xml,那很好;否则我就忘记了线程。无论如何,实际上,我只是忘记了线程(据我所知)。

问题是:这样可以吗,或者我应该做些什么来主动终止线程(EndInvoke()?),或者 GarbageCollector 是否为我处理它,所以我不会冒险耗尽内存或将服务器带到它的以其他方式屈膝。换句话说:我的代码是防弹的吗?

最佳答案

您确实需要调用 EndInvoke()

在您的情况下,您应该只调用 ThreadPool.QueueUserWorkItem;更简单。

关于c# - 委托(delegate)多线程 EndInvoke?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232947/

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