关于iasynresult实现的问题
本文关键字:问题 实现 iasynresult 关于 | 更新日期: 2023-09-27 17:52:38
我的即时消息库对大多数(如果不是全部)通过套接字发送的等待确认的通信都利用了Begin/End异步模式。
因此,我发现自己实现了相当多的操作IAsyncResult。(ChangeNicknameOperation, SendMessageOperation, AddUserOperation等)
我决定为我的异步操作创建一个名为AsyncOperationBase的基类,它包含IAsyncResult的标准实现,包括设置操作完成的方法。
这是常见的做法吗?我觉得这有点不必要,因为重复的代码相当少。
另外,当调用AsyncResult的回调时,是否建议在另一个线程上调用它,或者在完成操作的线程上调用它是完全合法的?
谢谢
对于你的问题,c# 5中新的async/await关键字将是最好的解决方案。但是在它被发布之前,使用基类是可以的。为了支持我的说法,我已经用Reflector查看了在BCL中实现IAsyncResult的类,并且有一个名为System.Net.LazyAsyncResult的大基类,其中有20个其他类派生自。所以,是的,这是一个很好的实践,它只会变得更容易,直到我们有c# 5。
下面是从LazyAsyncResult派生的类列表:
internal class System.Net.ContextAwareResult
internal class System.Net.ListenerClientCertAsyncResult
internal class System.Net.ListenerAsyncResult
internal class System.Net.HttpRequestStream/HttpRequestStreamAsyncResult
internal class System.Net.HttpResponseStreamAsyncResult
internal class System.Net.NestedMultipleAsyncResult
internal class System.Net.NestedSingleAsyncResult
internal class System.Net.WorkerAsyncResult
internal class System.Net.Cache.CombinedReadStream/InnerAsyncResult
internal class System.Net.Cache.ForwardingReadStream/InnerAsyncResult
internal class System.Net.BufferAsyncResult
internal class System.Net.Base64Stream/ReadAsyncResult
internal class System.Net.Base64Stream/WriteAsyncResult
internal class System.Net.BufferedReadStream/ReadAsyncResult
internal class System.Net.Mime.MimeBasePart/MimePartAsyncResult
internal class System.Net.Mime.MultiAsyncResult
internal class System.Net.Mime.QuotedPrintableStream/WriteAsyncResult
internal class System.Net.Mail.SmtpConnection/ConnectAndHandshakeAsyncResult
internal class System.Net.Mail.SmtpReplyReaderFactory/ReadLinesAsyncResult
internal class System.Net.Mail.SendMailAsyncResult
你的,阿洛伊斯•克劳斯