我的方法返回StringBuilder
并传入List<string>
个网址。
我相信父母会等到孩子完成。
但是这个方法在完成之前似乎已经退出了,因为调用者有一个Messagebox
弹出窗口和我的Debug.WriteLine(count)
;仍然在调试窗口中计数。
我的主要问题是:
结果StringBuilder
对象没有像循环后那样附加到它上面。是否可以使用StringBuilder
来重置Task
?
int count = 1;
StringBuilder result = new StringBuilder();
var parent = Task.Factory.StartNew(() =>
{
foreach (string url in pURI)
{
try
{
var child = Task.Factory.StartNew(() =>
{
using (HttpClient client = new HttpClient())
{
result.Append(client.GetStringAsync(url).Result.ToLower());
Debug.WriteLine(count);
count++;
}
}, TaskCreationOptions.AttachedToParent);
}
catch (Exception cancelException)
{
MessageBox.Show(cancelException.Message);
}
Debug.WriteLine(url.ToString());
}
});
parent.Wait();
return result;
答案 0 :(得分:0)
在循环内部,GetStringAsync到该位代码的本地字符串var。当你有字符串时,在执行追加时锁定StringBuilder。
未经考验的例子,我不是为你做的全部。 :)
using (HttpClient client = new HttpClient())
{
string s = client.GetStringAsync(url).Result.ToLower();
lock(result)
{
result.Append(s);
}
Debug.WriteLine(count);
count++;
}
有关详细信息,请参阅here。