【问题标题】:Locking WebClient - multithreaded application锁定 WebClient - 多线程应用程序
【发布时间】:2011-04-22 13:39:50
【问题描述】:

我有在我的机器人中使用的 webClient:

using System;
using System.Net;

namespace Game_Bot
{
    class WebClientEx : WebClient
    {
        public CookieContainer CookieContainer { get; private set; }

        public WebClientEx()
        {
            CookieContainer = new CookieContainer();
        }

        public void ClearCookies()
        {
            CookieContainer = new CookieContainer();
        }

        protected override WebRequest GetWebRequest(Uri address)
        {

            var request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = CookieContainer;
            }
            return request;
        }
    }

}

我的 webclient 有一个对象。 有很多方法可以使用它。如果两个线程想使用该 webClient 下载,我收到错误消息说 webClent 一次只能运行一个操作。 如何修改该类,以便当一个线程正在使用它时,另一个线程必须等待。 我需要以某种方式锁定它。

【问题讨论】:

  • 既然你不想让它们同时运行,为什么不使用队列呢? dotnetperls.com/queue
  • @Prix 所有线程都在做任务,等待,计数。有时这些线程需要从页面中加载一些 html。我非常罕见,但有时会遇到 2 个线程想要同时下载页面。我想锁定它,以便当时只有一个人可以使用该 WebClient。

标签: c# .net multithreading locking webclient


【解决方案1】:

【讨论】:

    【解决方案2】:

    例如,您可以使用互斥锁。
    当第一个客户端发出请求时,您将获得互斥体的属性,并在调用完成时释放它。
    当其他客户端发出请求时,首先您等待互斥锁,然后工作就完成了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多