我需要生成一个唯一的数字ID来附加到传入的请求.此ID仅用于临时跟踪请求,并在请求完成处理后将被丢弃.此ID仅在此应用程序的上下文中使用,但需要以高性能多线程方式分配.
我正在考虑使用DateTime.Now.Ticks来获取此ID,但是想知道如果同时处理同时请求,DateTime.Now.Ticks是否仍会生成冲突ID?
如果有人可以在多线程环境中建议一种更好的方法来生成这些ID(最好不是像Int这样的Int64),请告诉我.如果只是在递增之前我不必锁定数字,那么像递增数字一样简单就足够了.
非常感谢您的帮助.
在服务器端,我试图优雅地关闭一个连接的套接字。我知道 Socket 上的正确事件顺序应该是:
使用 SocketShutdown.Send 选项关闭套接字
循环/等待直到套接字接收返回 0 字节
套接字关闭
我有几个问题:
如果 Socket.Receive 永远不会返回(0 字节)怎么办?我们会一直试图关闭套接字吗?
每当我在服务器上调用 Close 时,客户端总是会收到“远程主机强行关闭现有连接”的异常。我怎样才能“优雅地”通知客户这个关闭?
在服务器上,如果我使用 Async Begin/EndReceive 调用,每当我在套接字上调用 Close 时,它总是会在 Begin/EndReceive 线程上导致 ObjectDisposedException。有没有办法在没有发生这种异常的情况下关闭套接字?