处理web请求时写入日志时出错



我正在visual studio 2010中使用C#.Net4.0 构建一个程序

我有一个函数,它接收一个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正被另一个程序使用。这种情况不会一直发生,但偶尔会发生,程序就会崩溃。

问题:我应该怎么做才能避免此错误?或者,有其他方法吗?

因为StreamWriter不是线程安全的,所以使用lock语句来锁定写入过程,这样其他线程就不能进入该行并导致冲突:http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.100).aspx

相关内容

  • 没有找到相关文章

最新更新