Csharp/C#教程:请问处理程序我的事件立即返回是否可以?分享


请问处理程序我的事件立即返回是否可以?

我正在写一个.NET库。 其中一个类具有库的用户需要订阅的事件。 可以问这些事件的处理程序实现快速返回吗? 或者这是一个常见的问题,有一个共同的解决方案?

(如果处理程序需要很长时间也不会致命 – 但是如果他们的处理程序需要的时间超过半秒,事情就会开始出错 – 这是一个网络库,并且连接的对等体会认为这个对等体已经丢失了发送回复的主题)

例如

public delegate void Ping(); class A { ///  /// If your handler doesn't return quickly... I am going to cry. ///  public event Ping Ping; private void RaisePing() { var handler = Ping; if(handler != null) handler(); } // this is called several times a secound private void MainLoop() { if(something) RaisePing(); // time important stuff - musn't take long to get here... } } 

请问处理程序我的事件立即返回是否可以?

是。

您应该在文档中明确声明如果订阅者没有及时返回,库将无法正常工作。

你不应该强制执行它

为什么? 因为你说你正在开发一个库。 与框架相对的库使用户处于控制之下。 因此,用户决定在订阅您的活动时做他们想要的事情。

强制执行处理程序只会增加复杂性,使库更难使用。 这就是为什么我认为最好能够清楚地表达期望,如果他们因处理器速度慢而遇到问题,只需将用户引用到文档中。

如果处理程序快速返回对您的代码至关重要,则应该在允许您取消处理程序的结构上构建它。 由于事件处理程序不允许您取消处理程序的执行,例如超时,因此您可以使用以下选项:

我个人认为这是一个坏主意 – 因为Windows不是实时操作系统。 在非实时操作系统中,您不能指望执行0.5秒的某些方法。

上述就是C#学习教程:请问处理程序我的事件立即返回是否可以?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1017771.html

(0)
上一篇 2022年1月3日
下一篇 2022年1月3日

精彩推荐