[英]Returning value from a disposed method
我有以下代码:
public class HttpRequestsHandler
{
public static T HttpGetWithContent<T>(string requestUrl)
{
using (var handler = new WebRequestHandler())
{
handler.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
using (var httpClient = new HttpClient(handler)
{
BaseAddress = new Uri(requestUrl),
Timeout = Timeout.InfiniteTimeSpan
})
{
using (var response = httpClient.GetAsync(requestUrl).Result)
{
if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Gone)
{
var errorMessage = $"HttpRequestTask: Request failed with status {response.StatusCode} for URL: {requestUrl}";
throw new HttpException(errorMessage, (int)response.StatusCode);
}
return response.Content.ReadAsAsync<T>().Result;
}
}
}
}
public static T HttpGetWithContentWrapper<T>(string requestUrl)
{
return HttpGetWithContent<T>(requestUrl);
}
}
现在,当我称它为:
private void Button_Click(object sender, DoWorkEventArgs e)
{
var worker = new BackgroundWorker();
worker.DoWork += (sender, args) =>
{
var url = UrlProvider.BuildRequestUrl();
var date = HttpRequestsHandler.HttpGetWithContent<DateTime>(url);
//More code...
};
worker.RunWorkerCompleted += (sender, args) =>
{
//more code...
};
worker.RunWorkerAsync();
}
它就像一种魅力,但是当我使用包装方法时:
private void Button_Click(object sender, DoWorkEventArgs e)
{
var worker = new BackgroundWorker();
worker.DoWork += (sender, args) =>
{
var url = UrlProvider.BuildRequestUrl();
var date = HttpRequestsHandler.HttpGetWithContentWrapper<DateTime>(url); //fails here
//More code...
};
worker.RunWorkerCompleted += (sender, args) =>
{
//more code...
};
worker.RunWorkerAsync();
}
它以错误“无法访问的区域”结束。
现在我想这与我不熟悉的一次性模式有关。 据我了解,它用于应用程序中的非托管资源,因此对象仅位于“使用中”。
我不明白的是它如何在第一部分而不是第二部分中返回值...
谢谢,
UPDATE-我很抱歉,为了使代码能正常工作,我粘贴了错误的代码,然后将其更改为原始代码,这给我带来了麻烦,谢谢
尝试改变
public static T HttpGetWithContentWrapper<T>(string requestUrl)
{
return HttpGetWithContent<T>(string requestUrl);
}
至
public static T HttpGetWithContentWrapper<T>(string requestUrl)
{
return HttpGetWithContent<T>(requestUrl);
}
通过将string requestUrl
编写为参数,可以有效地将空字符串传递给方法。 可能是导致错误的原因(假设此错误存在于您的实际代码中,而不仅仅是示例中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.