c# - 为什么异步回调套接字方法通常是静态的?

标签 c# c++ sockets asynchronous static

为什么异步回调套接字方法通常是静态的? (假设我了解静态类、方法和数据对象)。如果使用这些作为实例方法编写一个类,是否会出现基本的设计/逻辑错误?有什么特别需要注意避免的吗?

最佳答案

没有特定的理由认为它们应该是静态的。这完全取决于您的设计。

如果回调需要访问类中的成员,那么它可以声明为实例成员。但是,您需要确保正确同步对实例成员的访问,因为可以从不同线程并发调用回调。

我想您看过的所有示例都通过 IAsyncResult.AsyncState 将所需数据传递给回调,因此不需要来自类的其他信息。如果你能做到这一点,它可以简化你的代码,因为你不再需要担心线程同步等问题。

更新

澄清一下,根据评论,我似乎应该更明确。这并不是说静态回调是线程安全的,而是在将所需数据传递给回调的设计中,当然该数据不被其他线程共享,因此不需要锁定。由于回调传递了它需要的所有数据,它不需要访问类实例,因此可以设为静态。

关于c# - 为什么异步回调套接字方法通常是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678270/

相关文章:

perl - 多个系统读取导致以下系统写入在 Perl 中失败

sockets - 在通过 TCP/SSL 套接字发送内容之前发送/接收文件名

c# - WinVerifyTrust 返回 0x80092003 - CRYPT_E_FILE_ERROR

c++ - 给 unordered_map 赋值的基本问题

c++ - 如何在常量数组中重载 "[][] operator"?

c++ - Makefile - 找不到共享库

node.js - Node js - 为什么需要 3 个连接?

c# - 如何在 Visual Studio 中使用 XUnit 对在远程进程中运行的代码进行单元测试

C# - 从数据库中检索数据并存储在二维字典中?

c# - Wpf 用户控件缩放问题