为什么异步回调套接字方法通常是静态的? (假设我了解静态类、方法和数据对象)。如果使用这些作为实例方法编写一个类,是否会出现基本的设计/逻辑错误?有什么特别需要注意避免的吗?
最佳答案
没有特定的理由认为它们应该是静态的。这完全取决于您的设计。
如果回调需要访问类中的成员,那么它可以声明为实例成员。但是,您需要确保正确同步对实例成员的访问,因为可以从不同线程并发调用回调。
我想您看过的所有示例都通过 IAsyncResult.AsyncState
将所需数据传递给回调,因此不需要来自类的其他信息。如果你能做到这一点,它可以简化你的代码,因为你不再需要担心线程同步等问题。
更新
澄清一下,根据评论,我似乎应该更明确。这并不是说静态回调是线程安全的,而是在将所需数据传递给回调的设计中,当然该数据不被其他线程共享,因此不需要锁定。由于回调传递了它需要的所有数据,它不需要访问类实例,因此可以设为静态。
关于c# - 为什么异步回调套接字方法通常是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678270/