【发布时间】:2014-12-25 14:13:00
【问题描述】:
我正在使用 System.Net.WebClient.DownloadStringTaskAsync 异步从网页下载字符串。
大约 5 次中有 4 次成功完成,但偶尔会挂起,我必须重新启动程序才能“重置”它。
因此我正在考虑实现一个超时功能,它会在 5 秒后自动取消任务并重新启动它:
async void DoTasks()
{
string output;
int timeout = 5000;
WebClient client = new WebClient() { Encoding = Encoding.UTF8 };
Task<string> task = client.DownloadStringTaskAsync(url);
if (await Task.WhenAny(task, Task.Delay(timeout)) == task)
{
output = task.Result;
}
else
{
client.CancelAsync();
DoTasks();
}
}
然而,这会返回一个NullReferenceException。
【问题讨论】:
-
这段代码不可能导致
NullReferenceException。可能它在GetTasks方法中。此外,您不会处理WebClient。 -
你需要在问题中添加
GetTasks方法。 -
对不起,GetTasks 应该是 DoTasks - 重新启动方法
-
这里没有明显的可能导致
NullReferenceException。哪一行抛出异常? -
您还应该发布导致挂起的原始代码。你实际上是在问两个不相关的问题。
标签: c# asynchronous task webclient cancellation