小编Hun*_*ris的帖子

我可以从System.Net.Security.SslStream获得什么级别的线程安全性?

我有一个应用程序,用于SslStream发送和接收具有自己的固定长度框架的数据.通过包装NetworkStream返回来创建流,TcpClient.GetStream()如下所示:

var client = new TcpClient();
client.Connect(host, port);
var sslStream = new SslStream(client.GetStream(), false, callback, null);
sslStream.AuthenticateAsClient(hostname);
Run Code Online (Sandbox Code Playgroud)

因为协议是完全异步的(框架"消息"在任意时间到达并允许客户端在任意时间发送它们),我通常会生成一个负责阻塞的线程,NetworkStream.Read()并确保NetworkStream.Write(...)在任何时候只有一个线程调用一度.

备注的部分NetworkStream说:

可以在NetworkStream类的实例上同时执行读写操作,而无需同步.只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读写线程之间就不会存在交叉干扰,也不需要同步.

但是,MSDN文档 "线程安全"部分SslStream说:

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.

因为SslStream并且NetworkStream不在同一个类层次结构中,所以我假设(可能不正确)该备注NetworkStream不适用于SslStream.

线程安全的最佳方法是简单地用这样的东西包装SslStream.BeginRead/ SslStream.EndReadSslStream.BeginWrite/ SslStream.EndWrite吗?

internal sealed class StateObject
{
    private readonly ManualResetEvent _done = new ManualResetEvent(false);

    public int BytesRead { get; set; }
    public ManualResetEvent …
Run Code Online (Sandbox Code Playgroud)

c# ssl thread-safety sslstream

7
推荐指数
1
解决办法
2880
查看次数

如何将Emacs html-mode配置为像TextMate的默认HTML包一样?

我的一个朋友正在考虑从TextMate切换到Emacs.他习惯于TextMate的默认HTML编辑模式,它具有4个空格的制表位并插入制表符(即默认情况下不会自动缩进).它还允许使用" Cmd-Shift->" 完成打开的HTML标记.有任何想法吗?

html emacs textmate

3
推荐指数
1
解决办法
2212
查看次数

标签 统计

c# ×1

emacs ×1

html ×1

ssl ×1

sslstream ×1

textmate ×1

thread-safety ×1