【发布时间】:2015-11-07 14:51:20
【问题描述】:
我想写一个事件处理程序,当网站返回一些响应时触发一个方法。
我的应用程序通过从几个网站发布 URL 来获取响应。不幸的是,有时网站会在一些延迟后返回响应(可能需要 1 到 5 秒),这会导致我的应用程序抛出错误,因为下一个请求会在没有等待上一个请求得到响应的情况下执行。
我实际上可以在应用程序发布的每个请求之后设置一个睡眠时间,但这似乎不是正确的方式,因为如果我将 5 秒设置为睡眠时间,并且假设网站在 1 秒内返回响应,这会使进程等待不必要地多花 4 秒。
为了节省一些处理时间,我决定添加事件处理程序,它应该允许应用程序在我们获得上一个请求的响应后运行下一个请求。
所以我尝试了这样的事情,我可以调用触发器,但它没有按我想要的方式工作。
我的目的是创建一个触发器,在收到对上一个请求的响应后运行下一个请求,最多可以等待 5 秒。
谁能帮帮我,在此先感谢。
public delegate void ChangedEventHandler(string response);
public class ListWithChangedEvent : EventArgs
{
public event ChangedEventHandler Changed;
protected virtual void OnChanged(string response)
{
if (Changed != null)
{
Changed(response);
}
}
public void Validate(string response)
{
OnChanged(response);
}
}
public class EventListener
{
private ListWithChangedEvent _list;
public EventListener(ListWithChangedEvent list)
{
_list = list;
_list.Changed += new ChangedEventHandler(ListChanged);
}
private void ListChanged(string response)
{
if (!response.IsEmpty())
{
return;
}
}
}
//发布请求后验证响应
private void _postRequestAndParseResponse()
{
_performPostRequest(_returnTailPart(_urls.CommonUrl), argumentsList);
ListWithChangedEvent list = new ListWithChangedEvent();
EventListener listener = new EventListener(list);
list.Validate(_docNode.InnerHtml);
}
【问题讨论】:
-
你考虑过 Async 和 Await 吗?鉴于高度不可预测的延迟/带宽,这可能是事实上的事件驱动模型。
标签: c# asp.net .net c#-4.0 event-handling