C# .Net4.0 を使用して Visual Studio 2010 でプログラムを構築しています。
URLを取り込んで応答を取得しようとする関数があります。関数内で、成功とエラーを示すログ ファイルに書き込みます。
public void getResponse(string url, System.IO.StreamWriter writer)
{
try
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
// Display the status.
Console.WriteLine(response.Headers);
writeToLog("Success: " + url, writer);
}
catch (WebException ex)
{
writeToLog("Error: " + ex.message, writer);
}
}
URL のリストがあり、Parallel.ForEach を使用して一度に複数の URL を実行します。
System.IO.StreamWriter writer = new System.IO.StreamWriter("program.log", true);
string[] urls = {url1, url2, url3, url4, etc}; //have around 30 urls
Parallel.ForEach(urls, url => getResponse(url, writer));
プログラムを実行すると、program.log が別のプログラムによって使用されているというエラーが表示されることがあります。これは常に発生するわけではありませんが、まれに発生し、プログラムがクラッシュします。
質問:このエラーを回避するにはどうすればよいですか? または、それを行う別の方法はありますか?